mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-02-09 00:28:53 +01:00
Move CloudKit record creation to a high priority background queue so that it isn't blocking main
This commit is contained in:
parent
ac9ba39ea2
commit
8e890ec177
@ -114,35 +114,38 @@ final class CloudKitArticlesZone: CloudKitZone {
|
|||||||
var newRecords = [CKRecord]()
|
var newRecords = [CKRecord]()
|
||||||
var deleteRecordIDs = [CKRecord.ID]()
|
var deleteRecordIDs = [CKRecord.ID]()
|
||||||
|
|
||||||
for statusUpdate in statusUpdates {
|
DispatchQueue.global(qos: .userInitiated).async {
|
||||||
switch statusUpdate.record {
|
|
||||||
case .all:
|
|
||||||
modifyRecords.append(makeStatusRecord(statusUpdate))
|
|
||||||
modifyRecords.append(makeArticleRecord(statusUpdate.article!))
|
|
||||||
case .new:
|
|
||||||
newRecords.append(makeStatusRecord(statusUpdate))
|
|
||||||
newRecords.append(makeArticleRecord(statusUpdate.article!))
|
|
||||||
case .delete:
|
|
||||||
deleteRecordIDs.append(CKRecord.ID(recordName: statusID(statusUpdate.articleID), zoneID: Self.zoneID))
|
|
||||||
case .statusOnly:
|
|
||||||
modifyRecords.append(makeStatusRecord(statusUpdate))
|
|
||||||
deleteRecordIDs.append(CKRecord.ID(recordName: articleID(statusUpdate.articleID), zoneID: Self.zoneID))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
modify(recordsToSave: modifyRecords, recordIDsToDelete: deleteRecordIDs) { result in
|
for statusUpdate in statusUpdates {
|
||||||
switch result {
|
switch statusUpdate.record {
|
||||||
case .success:
|
case .all:
|
||||||
self.saveIfNew(newRecords) { result in
|
modifyRecords.append(self.makeStatusRecord(statusUpdate))
|
||||||
switch result {
|
modifyRecords.append(self.makeArticleRecord(statusUpdate.article!))
|
||||||
case .success:
|
case .new:
|
||||||
completion(.success(()))
|
newRecords.append(self.makeStatusRecord(statusUpdate))
|
||||||
case .failure(let error):
|
newRecords.append(self.makeArticleRecord(statusUpdate.article!))
|
||||||
completion(.failure(error))
|
case .delete:
|
||||||
}
|
deleteRecordIDs.append(CKRecord.ID(recordName: self.statusID(statusUpdate.articleID), zoneID: Self.zoneID))
|
||||||
|
case .statusOnly:
|
||||||
|
modifyRecords.append(self.makeStatusRecord(statusUpdate))
|
||||||
|
deleteRecordIDs.append(CKRecord.ID(recordName: self.articleID(statusUpdate.articleID), zoneID: Self.zoneID))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.modify(recordsToSave: modifyRecords, recordIDsToDelete: deleteRecordIDs) { result in
|
||||||
|
switch result {
|
||||||
|
case .success:
|
||||||
|
self.saveIfNew(newRecords) { result in
|
||||||
|
switch result {
|
||||||
|
case .success:
|
||||||
|
completion(.success(()))
|
||||||
|
case .failure(let error):
|
||||||
|
completion(.failure(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case .failure(let error):
|
||||||
|
self.handleModifyArticlesError(error, statusUpdates: statusUpdates, completion: completion)
|
||||||
}
|
}
|
||||||
case .failure(let error):
|
|
||||||
self.handleModifyArticlesError(error, statusUpdates: statusUpdates, completion: completion)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user