diff --git a/Account/Sources/Account/Account.swift b/Account/Sources/Account/Account.swift index 2b9f496bc..f118c6ab3 100644 --- a/Account/Sources/Account/Account.swift +++ b/Account/Sources/Account/Account.swift @@ -856,24 +856,29 @@ public enum FetchType { } func update(_ articles: Set
, statusKey: ArticleStatus.Key, flag: Bool, completion: @escaping ArticleSetResultBlock) { + // Returns set of Articles whose statuses did change. + guard !articles.isEmpty else { completion(.success(Set
())) return } - - database.mark(articles, statusKey: statusKey, flag: flag) { result in - MainActor.assumeIsolated { - switch result { - case .success(let updatedStatuses): + Task { @MainActor in + + do { + var updatedArticles = Set
() + + if let updatedStatuses = try await database.mark(articles: articles, statusKey: statusKey, flag: flag) { let updatedArticleIDs = updatedStatuses.articleIDs() - let updatedArticles = Set(articles.filter{ updatedArticleIDs.contains($0.articleID) }) + updatedArticles = Set(articles.filter{ updatedArticleIDs.contains($0.articleID) }) self.noteStatusesForArticlesDidChange(updatedArticles) - completion(.success(updatedArticles)) - case .failure(let error): - completion(.failure(error)) } + + completion(.success(updatedArticles)) + + } catch { + completion(.failure(.suspended)) } } } @@ -899,14 +904,14 @@ public enum FetchType { completion?(nil) return } - database.mark(articleIDs: articleIDs, statusKey: statusKey, flag: flag) { error in - MainActor.assumeIsolated { - if let error { - completion?(error) - } else { - self.noteStatusesForArticleIDsDidChange(articleIDs: articleIDs, statusKey: statusKey, flag: flag) - completion?(nil) - } + + Task { @MainActor in + do { + try await database.mark(articleIDs: articleIDs, statusKey: statusKey, flag: flag) + self.noteStatusesForArticleIDsDidChange(articleIDs: articleIDs, statusKey: statusKey, flag: flag) + completion?(nil) + } catch { + completion?(.suspended) } } } diff --git a/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabaseCompatibility.swift b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabaseCompatibility.swift index fb7b26c34..ebda6daac 100644 --- a/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabaseCompatibility.swift +++ b/ArticlesDatabase/Sources/ArticlesDatabase/ArticlesDatabaseCompatibility.swift @@ -20,12 +20,6 @@ public typealias UpdateArticlesCompletionBlock = @Sendable (UpdateArticlesResult public typealias ArticleSetResult = Result, DatabaseError> public typealias ArticleSetResultBlock = (ArticleSetResult) -> Void -public typealias ArticleIDsResult = Result, DatabaseError> -public typealias ArticleIDsCompletionBlock = @Sendable (ArticleIDsResult) -> Void - -public typealias ArticleStatusesResult = Result, DatabaseError> -public typealias ArticleStatusesResultBlock = (ArticleStatusesResult) -> Void - public extension ArticlesDatabase { // MARK: - Saving, Updating, and Deleting Articles @@ -56,61 +50,10 @@ public extension ArticlesDatabase { } } - // MARK: - Status - - nonisolated func mark(_ articles: Set
, statusKey: ArticleStatus.Key, flag: Bool, completion: @escaping ArticleStatusesResultBlock) { - - Task { - do { - let statuses = try await mark(articles: articles, statusKey: statusKey, flag: flag)! - callArticleStatusesCompletion(completion, .success(statuses)) - } catch { - callArticleStatusesCompletion(completion, .failure(.suspended)) - } - } - } - - nonisolated func mark(articleIDs: Set, statusKey: ArticleStatus.Key, flag: Bool, completion: @escaping DatabaseCompletionBlock) { - - Task { - do { - try await mark(articleIDs: articleIDs, statusKey: statusKey, flag: flag) - callDatabaseCompletion(completion) - } catch { - callDatabaseCompletion(completion, .suspended) - } - } - } - nonisolated private func callUpdateArticlesCompletion(_ completion: @escaping UpdateArticlesCompletionBlock, _ result: UpdateArticlesResult) { Task { @MainActor in completion(result) } } - - nonisolated private func callArticleStatusesCompletion(_ completion: @escaping ArticleStatusesResultBlock, _ result: ArticleStatusesResult) { - - Task { @MainActor in - completion(result) - } - } - - nonisolated private func callArticleIDsCompletion(_ completion: @escaping ArticleIDsCompletionBlock, _ result: ArticleIDsResult) { - - Task { @MainActor in - completion(result) - } - } - - nonisolated private func callDatabaseCompletion(_ completion: DatabaseCompletionBlock?, _ error: DatabaseError? = nil) { - - guard let completion else { - return - } - - Task { @MainActor in - completion(error) - } - } }