Simplify the compression logic

This commit is contained in:
Maurice Parker 2021-02-24 15:33:24 -06:00
parent 42930371b8
commit bb99e6f69c

View File

@ -101,11 +101,10 @@ final class CloudKitArticlesZone: CloudKitZone {
}
compressionQueue.async {
self.compressArticleRecords(records) { compressedRecords in
let compressedRecords = self.compressArticleRecords(records)
self.save(compressedRecords, completion: completion)
}
}
}
func deleteArticles(_ webFeedExternalID: String, completion: @escaping ((Result<Void, Error>) -> Void)) {
let predicate = NSPredicate(format: "webFeedExternalID = %@", webFeedExternalID)
@ -140,11 +139,11 @@ final class CloudKitArticlesZone: CloudKitZone {
}
compressionQueue.async {
self.compressArticleRecords(modifyRecords) { compressedModifyRecords in
self.compressArticleRecords(newRecords) { compressedNewRecords in
let compressedModifyRecords = self.compressArticleRecords(modifyRecords)
self.modify(recordsToSave: compressedModifyRecords, recordIDsToDelete: deleteRecordIDs) { result in
switch result {
case .success:
let compressedNewRecords = self.compressArticleRecords(newRecords)
self.saveIfNew(compressedNewRecords) { result in
switch result {
case .success:
@ -158,8 +157,6 @@ final class CloudKitArticlesZone: CloudKitZone {
}
}
}
}
}
}
@ -252,7 +249,7 @@ private extension CloudKitArticlesZone {
return record
}
func compressArticleRecords(_ records: [CKRecord], completion: ([CKRecord]) -> Void ) {
func compressArticleRecords(_ records: [CKRecord]) -> [CKRecord] {
var result = [CKRecord]()
for record in records {
@ -262,7 +259,7 @@ private extension CloudKitArticlesZone {
if let contentHTML = record[CloudKitArticle.Fields.contentHTML] as? String {
let data = Data(contentHTML.utf8) as NSData
if let compressedData = try? data.compressed(using: .lzfse) {
record[CloudKitArticle.Fields.contentHTMLData] = compressedData
record[CloudKitArticle.Fields.contentHTMLData] = compressedData as Data
record[CloudKitArticle.Fields.contentHTML] = nil
}
}
@ -270,19 +267,17 @@ private extension CloudKitArticlesZone {
if let contentText = record[CloudKitArticle.Fields.contentText] as? String {
let data = Data(contentText.utf8) as NSData
if let compressedData = try? data.compressed(using: .lzfse) {
record[CloudKitArticle.Fields.contentTextData] = compressedData
record[CloudKitArticle.Fields.contentTextData] = compressedData as Data
record[CloudKitArticle.Fields.contentText] = nil
}
}
} else {
}
result.append(record)
}
}
completion(result)
return result
}
}