// // StatusCache.swift // Tusker // // Created by Shadowfacts on 9/17/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import Foundation import Pachyderm class MastodonCache { private static let statuses = NSCache() private static let accounts = NSCache() // MARK: - Statuses static func status(for id: String) -> Status? { return statuses.object(forKey: id as NSString) } static func set(status: Status, for id: String) { statuses.setObject(status, forKey: id as NSString) add(account: status.account) if let reblog = status.reblog { add(account: reblog.account) } } static func status(for id: String, completion: @escaping (Status?) -> Void) { let request = MastodonController.shared.client.getStatus(id: id) MastodonController.shared.client.run(request) { response in guard case let .success(status, _) = response else { completion(nil) return } set(status: status, for: id) completion(status) } } static func add(status: Status) { set(status: status, for: status.id) } static func addAll(statuses: [Status]) { statuses.forEach(add) } // MARK: - Accounts static func account(for id: String) -> Account? { return accounts.object(forKey: id as NSString) } static func set(account: Account, for id: String) { accounts.setObject(account, forKey: id as NSString) } static func account(for id: String, completion: @escaping (Account?) -> Void) { let request = MastodonController.shared.client.getAccount(id: id) MastodonController.shared.client.run(request) { response in guard case let .success(account, _) = response else { completion(nil) return } set(account: account, for: account.id) completion(account) } } static func add(account: Account) { set(account: account, for: account.id) } static func addAll(accounts: [Account]) { accounts.forEach(add) } }