// // Account.swift // MastodonIntent // // Created by MainasuK on 2022-6-9. // import Foundation import CoreData import CoreDataStack import Intents import MastodonCore extension Account { @MainActor static func fetch(in managedObjectContext: NSManagedObjectContext) async throws -> [Account] { // get accounts let accounts: [Account] = try await managedObjectContext.perform { let results = try MastodonAuthentication.fetch(in: managedObjectContext) let accounts = results.compactMap { mastodonAuthentication -> Account? in let user = mastodonAuthentication.user let account = Account( identifier: mastodonAuthentication.identifier.uuidString, display: user.displayNameWithFallback, subtitle: user.acctWithDomain, image: user.avatarImageURL().flatMap { INImage(url: $0) } ) account.name = user.displayNameWithFallback account.username = user.acctWithDomain return account } return accounts } // end managedObjectContext.perform return accounts } } extension Array where Element == Account { func mastodonAuthentication(in managedObjectContext: NSManagedObjectContext) throws -> [MastodonAuthentication] { let identifiers = self .compactMap { $0.identifier } .compactMap { UUID(uuidString: $0) } let request = MastodonAuthentication.sortedFetchRequest request.predicate = MastodonAuthentication.predicate(identifiers: identifiers) let results = try managedObjectContext.fetch(request) return results } }