mastodon-ios/Mastodon/Service/APIService/Persist/APIService+Persist+PersistC...

67 lines
1.7 KiB
Swift

//
// APIService+Persist+PersistCache.swift
// Mastodon
//
// Created by MainasuK Cirno on 2021-3-10.
//
import Foundation
import CoreDataStack
import MastodonSDK
extension APIService.Persist {
class PersistCache<T> {
var dictionary: [String : T] = [:]
}
}
extension APIService.Persist.PersistCache where T == Status {
static func ids(for statuses: [Mastodon.Entity.Status]) -> Set<Mastodon.Entity.Status.ID> {
var value = Set<String>()
for status in statuses {
value = value.union(ids(for: status))
}
return value
}
static func ids(for status: Mastodon.Entity.Status) -> Set<Mastodon.Entity.Status.ID> {
var value = Set<String>()
value.insert(status.id)
if let inReplyToID = status.inReplyToID {
value.insert(inReplyToID)
}
if let reblog = status.reblog {
value = value.union(ids(for: reblog))
}
return value
}
}
extension APIService.Persist.PersistCache where T == MastodonUser {
static func ids(for statuses: [Mastodon.Entity.Status]) -> Set<Mastodon.Entity.Account.ID> {
var value = Set<String>()
for status in statuses {
value = value.union(ids(for: status))
}
return value
}
static func ids(for status: Mastodon.Entity.Status) -> Set<Mastodon.Entity.Account.ID> {
var value = Set<String>()
value.insert(status.account.id)
if let inReplyToAccountID = status.inReplyToAccountID {
value.insert(inReplyToAccountID)
}
if let reblog = status.reblog {
value = value.union(ids(for: reblog))
}
return value
}
}