Continue deleting completion-based functions in SyncDatabase.

This commit is contained in:
Brent Simmons 2024-03-25 21:44:25 -07:00
parent 4385b2d6b7
commit 951349ffc5
7 changed files with 81 additions and 114 deletions

View File

@ -38,20 +38,21 @@ class CloudKitArticlesZoneDelegate: CloudKitZoneDelegate {
switch result {
case .success(let pendingReadStatusArticleIDs):
self.database.selectPendingStarredStatusArticleIDs() { result in
switch result {
case .success(let pendingStarredStatusArticleIDs):
Task { @MainActor in
do {
let pendingStarredStatusArticleIDs = (try await self.database.selectPendingStarredStatusArticleIDs()) ?? Set<String>()
self.delete(recordKeys: deleted, pendingStarredStatusArticleIDs: pendingStarredStatusArticleIDs) {
Task { @MainActor in
self.update(records: changed,
pendingReadStatusArticleIDs: pendingReadStatusArticleIDs,
pendingStarredStatusArticleIDs: pendingStarredStatusArticleIDs,
completion: completion)
pendingReadStatusArticleIDs: pendingReadStatusArticleIDs,
pendingStarredStatusArticleIDs: pendingStarredStatusArticleIDs,
completion: completion)
}
}
case .failure(let error):
} catch {
os_log(.error, log: self.log, "Error occurred getting pending starred records: %@", error.localizedDescription)
completion(.failure(CloudKitZoneError.unknown))
}
@ -206,7 +207,7 @@ private extension CloudKitArticlesZoneDelegate {
}
guard let uniqueID = articleRecord[CloudKitArticlesZone.CloudKitArticle.Fields.uniqueID] as? String,
let feedURL = articleRecord[CloudKitArticlesZone.CloudKitArticle.Fields.feedURL] as? String else {
let feedURL = articleRecord[CloudKitArticlesZone.CloudKitArticle.Fields.feedURL] as? String else {
return nil
}
@ -244,5 +245,4 @@ private extension CloudKitArticlesZoneDelegate {
return parsedItem
}
}

View File

@ -1360,9 +1360,11 @@ private extension FeedbinAccountDelegate {
return
}
database.selectPendingStarredStatusArticleIDs() { result in
Task { @MainActor in
do {
let pendingArticleIDs = (try await self.database.selectPendingStarredStatusArticleIDs()) ?? Set<String>()
MainActor.assumeIsolated {
@MainActor func process(_ pendingArticleIDs: Set<String>) {
let feedbinStarredArticleIDs = Set(articleIDs.map { String($0) } )
@ -1396,18 +1398,14 @@ private extension FeedbinAccountDelegate {
}
}
}
}
switch result {
case .success(let pendingArticleIDs):
process(pendingArticleIDs)
case .failure(let error):
os_log(.error, log: self.log, "Sync Article Starred Status failed: %@.", error.localizedDescription)
}
process(pendingArticleIDs)
} catch {
os_log(.error, log: self.log, "Sync Article Starred Status failed: %@.", error.localizedDescription)
}
}
}
func deleteTagging(for account: Account, with feed: Feed, from container: Container?, completion: @escaping (Result<Void, Error>) -> Void) {

View File

@ -77,17 +77,15 @@ final class FeedlyIngestStarredArticleIdsOperation: FeedlyOperation {
return
}
database.selectPendingStarredStatusArticleIDs { result in
MainActor.assumeIsolated {
switch result {
case .success(let pendingArticleIds):
self.remoteEntryIds.subtract(pendingArticleIds)
Task { @MainActor in
self.updateStarredStatuses()
case .failure(let error):
self.didFinish(with: error)
do {
if let pendingArticleIDs = try await self.database.selectPendingStarredStatusArticleIDs() {
self.remoteEntryIds.subtract(pendingArticleIDs)
}
self.updateStarredStatuses()
} catch {
self.didFinish(with: error)
}
}
}

View File

@ -78,17 +78,15 @@ final class FeedlyIngestUnreadArticleIdsOperation: FeedlyOperation {
return
}
database.selectPendingReadStatusArticleIDs { result in
MainActor.assumeIsolated {
switch result {
case .success(let pendingArticleIds):
self.remoteEntryIds.subtract(pendingArticleIds)
Task { @MainActor in
self.updateUnreadStatuses()
case .failure(let error):
self.didFinish(with: error)
do {
if let pendingArticleIDs = try await self.database.selectPendingReadStatusArticleIDs() {
self.remoteEntryIds.subtract(pendingArticleIDs)
}
self.updateUnreadStatuses()
} catch {
self.didFinish(with: error)
}
}
}

View File

@ -381,8 +381,11 @@ extension NewsBlurAccountDelegate {
return
}
database.selectPendingStarredStatusArticleIDs() { result in
MainActor.assumeIsolated {
Task { @MainActor in
do {
let pendingArticleIDs = (try await database.selectPendingStarredStatusArticleIDs()) ?? Set<String>()
@MainActor func process(_ pendingStoryHashes: Set<String>) {
let newsBlurStarredStoryHashes = Set(hashes.map { $0.hash } )
@ -417,12 +420,10 @@ extension NewsBlurAccountDelegate {
}
}
switch result {
case .success(let pendingArticleIDs):
process(pendingArticleIDs)
case .failure(let error):
os_log(.error, log: self.log, "Sync Story Starred Status failed: %@.", error.localizedDescription)
}
process(pendingArticleIDs)
} catch {
os_log(.error, log: self.log, "Sync Story Starred Status failed: %@.", error.localizedDescription)
}
}
}

View File

@ -1161,9 +1161,12 @@ private extension ReaderAPIAccountDelegate {
return
}
database.selectPendingStarredStatusArticleIDs() { result in
Task { @MainActor in
do {
let pendingArticleIDs = (try await self.database.selectPendingStarredStatusArticleIDs()) ?? Set<String>()
MainActor.assumeIsolated {
@MainActor func process(_ pendingArticleIDs: Set<String>) {
let updatableReaderUnreadArticleIDs = Set(articleIDs).subtracting(pendingArticleIDs)
@ -1197,15 +1200,11 @@ private extension ReaderAPIAccountDelegate {
}
}
switch result {
case .success(let pendingArticleIDs):
process(pendingArticleIDs)
case .failure(let error):
os_log(.error, log: self.log, "Sync Article Starred Status failed: %@.", error.localizedDescription)
}
process(pendingArticleIDs)
} catch {
os_log(.error, log: self.log, "Sync Article Starred Status failed: %@.", error.localizedDescription)
}
}
}
}

View File

@ -68,7 +68,7 @@ public actor SyncDatabase {
return syncStatusTable.selectPendingStarredStatusArticleIDs(database: database)
}
public func resetAllSelectedForProcessing() throws {
public func resetAllSelectedForProcessing() throws {
guard let database else {
throw DatabaseError.suspended
@ -179,33 +179,6 @@ public extension SyncDatabase {
}
}
}
nonisolated func selectPendingStarredStatusArticleIDs(completion: @escaping SyncStatusArticleIDsCompletionBlock) {
Task { @MainActor in
do {
if let articleIDs = try await self.selectPendingStarredStatusArticleIDs() {
completion(.success(articleIDs))
} else {
completion(.success(Set<String>()))
}
} catch {
completion(.failure(DatabaseError.suspended))
}
}
}
nonisolated func resetAllSelectedForProcessing(completion: DatabaseCompletionBlock? = nil) {
Task { @MainActor in
do {
try await self.resetAllSelectedForProcessing()
completion?(nil)
} catch {
completion?(DatabaseError.suspended)
}
}
}
}
private extension SyncDatabase {