Continue adopting async/await.

This commit is contained in:
Brent Simmons
2023-07-11 21:16:38 -07:00
parent 29cb574f3a
commit 65106be716
5 changed files with 178 additions and 209 deletions

View File

@@ -44,10 +44,18 @@ public struct SyncDatabase {
syncStatusTable.selectPendingCount(completion)
}
public func selectPendingReadArticleIDs() async throws -> Set<String> {
try await syncStatusTable.selectPendingReadArticleIDs()
}
public func selectPendingReadStatusArticleIDs(completion: @escaping SyncStatusArticleIDsCompletionBlock) {
syncStatusTable.selectPendingReadStatusArticleIDs(completion: completion)
}
public func selectPendingStarredArticleIDs() async throws -> Set<String> {
try await syncStatusTable.selectPendingStarredArticleIDs()
}
public func selectPendingStarredStatusArticleIDs(completion: @escaping SyncStatusArticleIDsCompletionBlock) {
syncStatusTable.selectPendingStarredStatusArticleIDs(completion: completion)
}

View File

@@ -87,10 +87,18 @@ struct SyncStatusTable: DatabaseTable {
}
}
func selectPendingReadArticleIDs() async throws -> Set<String> {
return try await selectPendingArticleIDs(.read)
}
func selectPendingReadStatusArticleIDs(completion: @escaping SyncStatusArticleIDsCompletionBlock) {
selectPendingArticleIDsAsync(.read, completion)
}
func selectPendingStarredArticleIDs() async throws -> Set<String> {
return try await selectPendingArticleIDs(.starred)
}
func selectPendingStarredStatusArticleIDs(completion: @escaping SyncStatusArticleIDsCompletionBlock) {
selectPendingArticleIDsAsync(.starred, completion)
}
@@ -197,7 +205,22 @@ private extension SyncStatusTable {
return SyncStatus(articleID: articleID, key: key, flag: flag, selected: selected)
}
func selectPendingArticleIDs(_ statusKey: ArticleStatus.Key) async throws -> Set<String> {
return try await withCheckedThrowingContinuation() { continuation in
Task { @MainActor in
selectPendingArticleIDsAsync(statusKey) { result in
switch result {
case .success(let articleIDs):
continuation.resume(returning: articleIDs)
case .failure(let databaseError):
continuation.resume(throwing: databaseError)
}
}
}
}
}
func selectPendingArticleIDsAsync(_ statusKey: ArticleStatus.Key, _ completion: @escaping SyncStatusArticleIDsCompletionBlock) {
queue.runInDatabase { databaseResult in