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