// // StatusTablePrefetching.swift // Tusker // // Created by Shadowfacts on 1/18/21. // Copyright © 2021 Shadowfacts. All rights reserved. // import Foundation import CoreData protocol StatusTablePrefetching: TuskerNavigationDelegate { } extension StatusTablePrefetching { func prefetchStatuses(with ids: [String]) { let context = apiController.persistentContainer.prefetchBackgroundContext context.perform { guard let statuses = getStatusesWith(ids: ids, in: context) else { return } for status in statuses { _ = ImageCache.avatars.get(status.account.avatar, completion: nil) for attachment in status.attachments where attachment.kind == .image { _ = ImageCache.attachments.get(attachment.url, completion: nil) } } } } func cancelPrefetchingStatuses(with ids: [String]) { let context = apiController.persistentContainer.prefetchBackgroundContext context.perform { guard let statuses = getStatusesWith(ids: ids, in: context) else { return } for status in statuses { ImageCache.avatars.cancelWithoutCallback(status.account.avatar) for attachment in status.attachments where attachment.kind == .image { ImageCache.attachments.cancelWithoutCallback(attachment.url) } } } } } fileprivate func getStatusesWith(ids: [String], in context: NSManagedObjectContext) -> [StatusMO]? { let request: NSFetchRequest = StatusMO.fetchRequest() request.predicate = NSPredicate(format: "id IN %@", ids) return try? context.fetch(request) }