40 lines
1.2 KiB
Swift
40 lines
1.2 KiB
Swift
//
|
|
// 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 {
|
|
guard let avatar = status.account.avatar else { continue }
|
|
ImageCache.avatars.fetchIfNotCached(avatar)
|
|
for attachment in status.attachments where attachment.kind == .image {
|
|
ImageCache.attachments.fetchIfNotCached(attachment.url)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
fileprivate func getStatusesWith(ids: [String], in context: NSManagedObjectContext) -> [StatusMO]? {
|
|
let request: NSFetchRequest<StatusMO> = StatusMO.fetchRequest()
|
|
request.predicate = NSPredicate(format: "id IN %@", ids)
|
|
return try? context.fetch(request)
|
|
}
|