2
2
mirror of https://github.com/mastodon/mastodon-ios synced 2025-04-11 22:58:02 +02:00
2024-01-30 23:02:13 +01:00

96 lines
3.1 KiB
Swift

//
// StatusItem.swift
// Mastodon
//
// Created by MainasuK on 2022-1-11.
//
import Foundation
import CoreDataStack
import MastodonUI
import MastodonSDK
enum StatusItem: Hashable {
case feed(record: MastodonFeed)
case feedLoader(record: MastodonFeed)
case status(record: MastodonStatus)
case thread(Thread)
case topLoader
case bottomLoader
}
extension StatusItem {
enum Thread: Hashable {
case root(context: Context)
case reply(context: Context)
case leaf(context: Context)
public var record: MastodonStatus {
get {
switch self {
case .root(let threadContext),
.reply(let threadContext),
.leaf(let threadContext):
return threadContext.status
}
}
set {
switch self {
case let .root(threadContext):
self = .root(context: .init(
status: newValue,
displayUpperConversationLink: threadContext.displayUpperConversationLink,
displayBottomConversationLink: threadContext.displayBottomConversationLink)
)
case let .reply(threadContext):
self = .reply(context: .init(
status: newValue,
displayUpperConversationLink: threadContext.displayUpperConversationLink,
displayBottomConversationLink: threadContext.displayBottomConversationLink)
)
case let .leaf(threadContext):
self = .leaf(context: .init(
status: newValue,
displayUpperConversationLink: threadContext.displayUpperConversationLink,
displayBottomConversationLink: threadContext.displayBottomConversationLink)
)
}
}
}
}
}
extension StatusItem.Thread {
class Context: Hashable {
let status: MastodonStatus
var displayUpperConversationLink: Bool
var displayBottomConversationLink: Bool
init(
status: MastodonStatus,
displayUpperConversationLink: Bool = false,
displayBottomConversationLink: Bool = false
) {
self.status = status
self.displayUpperConversationLink = displayUpperConversationLink
self.displayBottomConversationLink = displayBottomConversationLink
}
static func == (lhs: StatusItem.Thread.Context, rhs: StatusItem.Thread.Context) -> Bool {
return lhs.status == rhs.status
&& lhs.displayUpperConversationLink == rhs.displayUpperConversationLink
&& lhs.displayBottomConversationLink == rhs.displayBottomConversationLink
}
func hash(into hasher: inout Hasher) {
hasher.combine(status)
hasher.combine(displayUpperConversationLink)
hasher.combine(displayBottomConversationLink)
}
}
}