From 0fa51a9f0cfbb980044d0fadb3961dc5a9866e79 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Sat, 12 Nov 2022 15:18:50 -0600 Subject: [PATCH] Beef up the delete error handling --- .../CloudKitArticlesZoneDelegate.swift | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift b/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift index 8cc5acdb7..613640046 100644 --- a/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift +++ b/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift @@ -37,14 +37,16 @@ class CloudKitArticlesZoneDelegate: CloudKitZoneDelegate, Logging { self.database.selectPendingStarredStatusArticleIDs() { result in switch result { case .success(let pendingStarredStatusArticleIDs): - - self.delete(recordKeys: deleted, pendingStarredStatusArticleIDs: pendingStarredStatusArticleIDs) { - self.update(records: updated, - pendingReadStatusArticleIDs: pendingReadStatusArticleIDs, - pendingStarredStatusArticleIDs: pendingStarredStatusArticleIDs, - completion: completion) + self.delete(recordKeys: deleted, pendingStarredStatusArticleIDs: pendingStarredStatusArticleIDs) { error in + if let error = error { + completion(.failure(error)) + } else { + self.update(records: updated, + pendingReadStatusArticleIDs: pendingReadStatusArticleIDs, + pendingStarredStatusArticleIDs: pendingStarredStatusArticleIDs, + completion: completion) + } } - case .failure(let error): self.logger.error("Error occurred getting pending starred records: \(error.localizedDescription, privacy: .public)") completion(.failure(CloudKitZoneError.unknown)) @@ -63,19 +65,27 @@ class CloudKitArticlesZoneDelegate: CloudKitZoneDelegate, Logging { private extension CloudKitArticlesZoneDelegate { - func delete(recordKeys: [CloudKitRecordKey], pendingStarredStatusArticleIDs: Set, completion: @escaping () -> Void) { + func delete(recordKeys: [CloudKitRecordKey], pendingStarredStatusArticleIDs: Set, completion: @escaping (Error?) -> Void) { let receivedRecordIDs = recordKeys.filter({ $0.recordType == CloudKitArticlesZone.CloudKitArticleStatus.recordType }).map({ $0.recordID }) let receivedArticleIDs = Set(receivedRecordIDs.map({ stripPrefix($0.externalID) })) let deletableArticleIDs = receivedArticleIDs.subtracting(pendingStarredStatusArticleIDs) guard !deletableArticleIDs.isEmpty else { - completion() + completion(nil) return } - database.deleteSelectedForProcessing(Array(deletableArticleIDs)) { _ in - self.account?.delete(articleIDs: deletableArticleIDs) { _ in - completion() + database.deleteSelectedForProcessing(Array(deletableArticleIDs)) { databaseError in + if let databaseError = databaseError { + completion(databaseError) + } else { + self.account?.delete(articleIDs: deletableArticleIDs) { databaseError in + if let databaseError = databaseError { + completion(databaseError) + } else { + completion(nil) + } + } } } }