diff --git a/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift b/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift index 25006ae45..b92f08324 100644 --- a/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift +++ b/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift @@ -700,9 +700,11 @@ private extension CloudKitAccountDelegate { } func sendNewArticlesToTheCloud(_ account: Account, _ feed: Feed) { - account.fetchArticlesAsync(.feed(feed)) { result in - switch result { - case .success(let articles): + + Task { @MainActor in + + do { + let articles = try await account.articles(for: .feed(feed)) self.storeArticleChanges(new: articles, updated: Set
(), deleted: Set
()) { self.refreshProgress.completeTask() self.sendArticleStatus(for: account, showProgress: true) { result in @@ -714,12 +716,13 @@ private extension CloudKitAccountDelegate { } } } - case .failure(let error): + + } catch { os_log(.error, log: self.log, "CloudKit Feed send articles error: %@.", error.localizedDescription) } } } - + func processAccountError(_ account: Account, _ error: Error) { if case CloudKitZoneError.userDeletedZone = error { account.removeFeeds(account.topLevelFeeds) diff --git a/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift b/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift index c15a58660..bfa90191e 100644 --- a/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift +++ b/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift @@ -76,7 +76,8 @@ private extension CloudKitArticlesZoneDelegate { return } - database.deleteSelectedForProcessing(Array(deletableArticleIDs)) { _ in + Task { @MainActor in + try? await self.database.deleteSelectedForProcessing(Array(deletableArticleIDs)) self.account?.delete(articleIDs: deletableArticleIDs) { _ in completion() } diff --git a/Account/Sources/Account/CloudKit/CloudKitSendStatusOperation.swift b/Account/Sources/Account/CloudKit/CloudKitSendStatusOperation.swift index 4737f559b..a96a86738 100644 --- a/Account/Sources/Account/CloudKit/CloudKitSendStatusOperation.swift +++ b/Account/Sources/Account/CloudKit/CloudKitSendStatusOperation.swift @@ -140,9 +140,9 @@ private extension CloudKitSendStatusOperation { // but the articles didn't come back in the fetch. We need to clean up those sync records // and stop processing. if statusUpdates.isEmpty { - self.database.deleteSelectedForProcessing(articleIDs) { _ in + Task { @MainActor in + try? await self.database.deleteSelectedForProcessing(articleIDs) done(true) - return } } else { @@ -150,7 +150,8 @@ private extension CloudKitSendStatusOperation { articlesZone.modifyArticles(statusUpdates) { result in switch result { case .success: - self.database.deleteSelectedForProcessing(statusUpdates.map({ $0.articleID })) { _ in + Task { @MainActor in + try? await self.database.deleteSelectedForProcessing(statusUpdates.map({ $0.articleID })) done(false) } case .failure(let error): @@ -164,7 +165,7 @@ private extension CloudKitSendStatusOperation { } } } - + switch result { case .success(let articles): processWithArticles(articles) @@ -174,10 +175,9 @@ private extension CloudKitSendStatusOperation { completion(true) } } - } } - + func processAccountError(_ account: Account, _ error: Error) { if case CloudKitZoneError.userDeletedZone = error { account.removeFeeds(account.topLevelFeeds) diff --git a/Account/Sources/Account/Feedly/Operations/FeedlySendArticleStatusesOperation.swift b/Account/Sources/Account/Feedly/Operations/FeedlySendArticleStatusesOperation.swift index 130cc700d..97016966a 100644 --- a/Account/Sources/Account/Feedly/Operations/FeedlySendArticleStatusesOperation.swift +++ b/Account/Sources/Account/Feedly/Operations/FeedlySendArticleStatusesOperation.swift @@ -71,7 +71,8 @@ private extension FeedlySendArticleStatusesOperation { assert(Thread.isMainThread) switch result { case .success: - database.deleteSelectedForProcessing(Array(ids)) { _ in + Task { @MainActor in + try? await database.deleteSelectedForProcessing(Array(ids)) group.leave() } case .failure: diff --git a/SyncDatabase/Sources/SyncDatabase/SyncDatabase.swift b/SyncDatabase/Sources/SyncDatabase/SyncDatabase.swift index 644d32ed3..f2e948e85 100644 --- a/SyncDatabase/Sources/SyncDatabase/SyncDatabase.swift +++ b/SyncDatabase/Sources/SyncDatabase/SyncDatabase.swift @@ -218,18 +218,6 @@ public extension SyncDatabase { } } } - - nonisolated func deleteSelectedForProcessing(_ articleIDs: [String], completion: DatabaseCompletionBlock? = nil) { - - Task { - do { - try await self.deleteSelectedForProcessing(articleIDs) - completion?(nil) - } catch { - completion?(DatabaseError.suspended) - } - } - } } private extension SyncDatabase {