From b322b87b9137cbf1266ae0f6613937bd368d0365 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Fri, 14 Jul 2023 11:02:48 -0700 Subject: [PATCH] Continue adopting async/await. --- Account/Sources/Account/Account.swift | 8 +++++++ .../CloudKitArticlesZoneDelegate.swift | 22 +++++++++---------- .../ArticlesDatabase/ArticlesDatabase.swift | 5 +++++ .../ArticlesDatabase/ArticlesTable.swift | 17 ++++++++++++++ 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/Account/Sources/Account/Account.swift b/Account/Sources/Account/Account.swift index 0a54b1724..de023cc82 100644 --- a/Account/Sources/Account/Account.swift +++ b/Account/Sources/Account/Account.swift @@ -946,6 +946,14 @@ public enum FetchType { mark(articleIDs: articleIDs, statusKey: .starred, flag: false, completion: completion) } + // Delete the articles associated with the given set of articleIDs + func deleteArticleIDs(_ articleIDs: Set) async throws { + guard !articleIDs.isEmpty else { + return + } + try await database.deleteArticleIDs(articleIDs) + } + // Delete the articles associated with the given set of articleIDs func delete(articleIDs: Set, completion: DatabaseCompletionBlock? = nil) { guard !articleIDs.isEmpty else { diff --git a/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift b/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift index d019fa260..d20959df4 100644 --- a/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift +++ b/Account/Sources/Account/CloudKit/CloudKitArticlesZoneDelegate.swift @@ -74,22 +74,22 @@ private extension CloudKitArticlesZoneDelegate { return } - database.deleteSelectedForProcessing(Array(deletableArticleIDs)) { databaseError in + database.deleteSelectedForProcessing(Array(deletableArticleIDs)) { databaseError in Task { @MainActor in if let databaseError = databaseError { completion(databaseError) - } else { - self.account?.delete(articleIDs: deletableArticleIDs) { databaseError in - if let databaseError = databaseError { - completion(databaseError) - } else { - completion(nil) - } - } + return + } + + do { + try await self.account?.deleteArticleIDs(deletableArticleIDs) + completion(nil) + } catch let error { + completion(error) } } - } - } + } + } @MainActor func update(records: [CKRecord], pendingReadStatusArticleIDs: Set, pendingStarredStatusArticleIDs: Set, completion: @escaping (Result) -> Void) { diff --git a/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabase.swift b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabase.swift index 04c936afc..44dd39272 100644 --- a/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabase.swift +++ b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabase.swift @@ -231,6 +231,11 @@ public typealias ArticleStatusesResultBlock = (ArticleStatusesResult) -> Void articlesTable.update(feedIDsAndItems, defaultRead, completion) } + /// Delete articles + public func deleteArticleIDs(_ articleIDs: Set) async throws { + try await articlesTable.deleteArticleIDs(articleIDs) + } + /// Delete articles public func delete(articleIDs: Set, completion: DatabaseCompletionBlock?) { articlesTable.delete(articleIDs: articleIDs, completion: completion) diff --git a/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesTable.swift b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesTable.swift index e9a333424..d977639e0 100644 --- a/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesTable.swift +++ b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesTable.swift @@ -367,6 +367,23 @@ final class ArticlesTable: DatabaseTable { } } + public func deleteArticleIDs(_ articleIDs: Set) async throws { + + try await withCheckedThrowingContinuation { continuation in + Task { @MainActor in + queue.runInTransaction { databaseResult in + switch databaseResult { + case .success(let database): + self.removeArticles(articleIDs, database) + continuation.resume() + case .failure(let databaseError): + continuation.resume(throwing: databaseError) + } + } + } + } + } + public func delete(articleIDs: Set, completion: DatabaseCompletionBlock?) { self.queue.runInTransaction { (databaseResult) in