diff --git a/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabase.swift b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabase.swift index 992fef5fa..988129cf6 100644 --- a/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabase.swift +++ b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabase.swift @@ -249,8 +249,8 @@ public typealias ArticleStatusesResultBlock = (ArticleStatusesResult) -> Void /// Create statuses for specified articleIDs. For existing statuses, don’t do anything. /// For newly-created statuses, mark them as read and not-starred. - public func createStatusesIfNeeded(articleIDs: Set, completion: @escaping DatabaseCompletionBlock) { - articlesTable.createStatusesIfNeeded(articleIDs, completion) + public func createStatusesIfNeeded(articleIDs: Set) async throws { + try await articlesTable.createStatusesIfNeeded(articleIDs) } #if os(iOS) diff --git a/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesTable.swift b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesTable.swift index a76ffb3e5..54a5d0d97 100644 --- a/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesTable.swift +++ b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesTable.swift @@ -590,17 +590,16 @@ final class ArticlesTable: DatabaseTable { } } - func createStatusesIfNeeded(_ articleIDs: Set, _ completion: @escaping DatabaseCompletionBlock) { - queue.runInTransaction { databaseResult in - switch databaseResult { - case .success(let database): - let _ = self.statusesTable.ensureStatusesForArticleIDs(articleIDs, true, database) - DispatchQueue.main.async { - completion(nil) - } - case .failure(let databaseError): - DispatchQueue.main.async { - completion(databaseError) + func createStatusesIfNeeded(_ articleIDs: Set) async throws { + + try await withCheckedThrowingContinuation { continuation in + queue.runInTransaction { databaseResult in + switch databaseResult { + case .success(let database): + let _ = self.statusesTable.ensureStatusesForArticleIDs(articleIDs, true, database) + continuation.resume(returning: nil) + case .failure(let databaseError): + continuation.resume(throwing: databaseError) } } }