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,9 +101,8 @@ 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)
}
} }
} }
@ -140,23 +139,21 @@ 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 {
case .success:
let compressedNewRecords = self.compressArticleRecords(newRecords)
self.saveIfNew(compressedNewRecords) { result in
switch result { switch result {
case .success: case .success:
self.saveIfNew(compressedNewRecords) { result in completion(.success(()))
switch result {
case .success:
completion(.success(()))
case .failure(let error):
completion(.failure(error))
}
}
case .failure(let error): case .failure(let error):
self.handleModifyArticlesError(error, statusUpdates: statusUpdates, completion: completion) completion(.failure(error))
} }
} }
case .failure(let error):
self.handleModifyArticlesError(error, statusUpdates: statusUpdates, completion: completion)
} }
} }
} }
@ -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
} }
} }