|
/// Contains the list of rants for the logged in user and other random things.
|
|
public struct RantFeed: Hashable, Sendable {
|
|
public let rants: [Rant]
|
|
|
|
public let sessionHash: String?
|
|
|
|
/// The weekly group rant week number.
|
|
public let weeklyRantWeek: Int?
|
|
|
|
/// True if the logged in user is subscribed to devRant++.
|
|
public let devRantSupporter: Bool
|
|
|
|
public let numberOfUnreadNotifications: Int
|
|
|
|
public let news: News?
|
|
|
|
public init(rants: [Rant], sessionHash: String?, weeklyRantWeek: Int?, devRantSupporter: Bool, numberOfUnreadNotifications: Int, news: RantFeed.News?) {
|
|
self.rants = rants
|
|
self.sessionHash = sessionHash
|
|
self.weeklyRantWeek = weeklyRantWeek
|
|
self.devRantSupporter = devRantSupporter
|
|
self.numberOfUnreadNotifications = numberOfUnreadNotifications
|
|
self.news = news
|
|
}
|
|
}
|
|
|
|
public extension RantFeed {
|
|
enum Sort: Sendable {
|
|
/// The devRant algorithm decides what rants appear in the feed.
|
|
case algorithm
|
|
|
|
/// The most recent rants appear in the feed.
|
|
case recent
|
|
|
|
/// The top rated rants appear in the feed.
|
|
case top(range: Range)
|
|
}
|
|
|
|
enum Range: Sendable {
|
|
/// Rants from the one day.
|
|
case day
|
|
|
|
/// Rants from the one week.
|
|
case week
|
|
|
|
/// Rants from the one month.
|
|
case month
|
|
|
|
/// Rants from all time.
|
|
case all
|
|
}
|
|
}
|
|
|
|
extension RantFeed {
|
|
struct CodingData: Codable {
|
|
let rants: [Rant.CodingData]
|
|
//let settings //not sure what the purpose is. probably not needed.
|
|
let set: String?
|
|
let wrw: Int?
|
|
let dpp: Int?
|
|
let num_notifs: Int?
|
|
//let unread //probably the same info as already provided by num_notifs, so not needed.
|
|
let news: News.CodingData?
|
|
}
|
|
}
|
|
|
|
extension RantFeed.CodingData {
|
|
var decoded: RantFeed {
|
|
.init(
|
|
rants: rants.map(\.decoded),
|
|
sessionHash: `set`,
|
|
weeklyRantWeek: wrw,
|
|
devRantSupporter: (dpp ?? 0) != 0,
|
|
numberOfUnreadNotifications: num_notifs ?? 0,
|
|
news: news?.decoded
|
|
)
|
|
}
|
|
}
|