76 lines
2.2 KiB
Swift
76 lines
2.2 KiB
Swift
// Copyright © 2023 Mastodon gGmbH. All rights reserved.
|
|
|
|
import Foundation
|
|
import CoreDataStack
|
|
|
|
public final class MastodonFeed {
|
|
|
|
public enum Kind {
|
|
case home
|
|
case notificationAll
|
|
case notificationMentions
|
|
}
|
|
|
|
public let id: String
|
|
public var hasMore: Bool = false
|
|
public var isLoadingMore: Bool = false
|
|
|
|
public let status: MastodonStatus?
|
|
public let notification: Mastodon.Entity.Notification?
|
|
|
|
public let kind: Feed.Kind
|
|
|
|
public init(hasMore: Bool, isLoadingMore: Bool, status: MastodonStatus?, notification: Mastodon.Entity.Notification?, kind: Feed.Kind) {
|
|
self.id = notification?.id ?? status?.id ?? UUID().uuidString
|
|
self.hasMore = hasMore
|
|
self.isLoadingMore = isLoadingMore
|
|
self.status = status
|
|
self.notification = notification
|
|
self.kind = kind
|
|
}
|
|
}
|
|
|
|
public extension MastodonFeed {
|
|
static func fromStatus(_ status: MastodonStatus, kind: Feed.Kind) -> MastodonFeed {
|
|
MastodonFeed(
|
|
hasMore: false,
|
|
isLoadingMore: false,
|
|
status: status,
|
|
notification: nil,
|
|
kind: kind
|
|
)
|
|
}
|
|
|
|
static func fromNotification(_ notification: Mastodon.Entity.Notification, kind: Feed.Kind) -> MastodonFeed {
|
|
MastodonFeed(
|
|
hasMore: false,
|
|
isLoadingMore: false,
|
|
status: {
|
|
guard let status = notification.status else {
|
|
return nil
|
|
}
|
|
return .fromEntity(status)
|
|
}(),
|
|
notification: notification,
|
|
kind: kind
|
|
)
|
|
}
|
|
}
|
|
|
|
extension MastodonFeed: Hashable {
|
|
public static func == (lhs: MastodonFeed, rhs: MastodonFeed) -> Bool {
|
|
lhs.id == rhs.id &&
|
|
lhs.status?.entity == rhs.status?.entity &&
|
|
lhs.status?.reblog?.entity == rhs.status?.reblog?.entity &&
|
|
lhs.status?.isSensitiveToggled == rhs.status?.isSensitiveToggled
|
|
}
|
|
|
|
public func hash(into hasher: inout Hasher) {
|
|
hasher.combine(id)
|
|
hasher.combine(status?.entity)
|
|
hasher.combine(status?.reblog?.entity)
|
|
hasher.combine(status?.isSensitiveToggled)
|
|
}
|
|
|
|
}
|