From 51b78ddd7023bbaa590baa0f615e7b39b87aaaaa Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Wed, 1 May 2024 21:51:12 -0700 Subject: [PATCH] Fix concurrency warning. --- .../CloudKitArticlesZoneDelegate.swift | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift b/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift index 57b04119c..7afeac266 100644 --- a/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift +++ b/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift @@ -40,14 +40,12 @@ final class CloudKitArticlesZoneDelegate: CloudKitZoneDelegate { let pendingReadStatusArticleIDs = (try await self.database.selectPendingReadStatusArticleIDs()) ?? Set() let pendingStarredStatusArticleIDs = (try await self.database.selectPendingStarredStatusArticleIDs()) ?? Set() - self.delete(recordKeys: deleted, pendingStarredStatusArticleIDs: pendingStarredStatusArticleIDs) { - Task { @MainActor in - self.update(records: changed, - pendingReadStatusArticleIDs: pendingReadStatusArticleIDs, - pendingStarredStatusArticleIDs: pendingStarredStatusArticleIDs, - completion: completion) - } - } + await self.delete(recordKeys: deleted, pendingStarredStatusArticleIDs: pendingStarredStatusArticleIDs) + + self.update(records: changed, + pendingReadStatusArticleIDs: pendingReadStatusArticleIDs, + pendingStarredStatusArticleIDs: pendingStarredStatusArticleIDs, + completion: completion) } catch { os_log(.error, log: self.log, "Error occurred getting pending status records: %@", error.localizedDescription) @@ -59,20 +57,18 @@ final class CloudKitArticlesZoneDelegate: CloudKitZoneDelegate { private extension CloudKitArticlesZoneDelegate { - func delete(recordKeys: [CloudKitRecordKey], pendingStarredStatusArticleIDs: Set, completion: @escaping () -> Void) { + func delete(recordKeys: [CloudKitRecordKey], pendingStarredStatusArticleIDs: Set) async { + 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() return } - Task { @MainActor in - try? await self.database.deleteSelectedForProcessing(Array(deletableArticleIDs)) - try? await self.account?.delete(articleIDs: deletableArticleIDs) - } + try? await database.deleteSelectedForProcessing(Array(deletableArticleIDs)) + try? await account?.delete(articleIDs: deletableArticleIDs) } @MainActor func update(records: [CKRecord], pendingReadStatusArticleIDs: Set, pendingStarredStatusArticleIDs: Set, completion: @escaping (Result) -> Void) {