diff --git a/Frameworks/Account/CloudKit/CloudKitAccountDelegate.swift b/Frameworks/Account/CloudKit/CloudKitAccountDelegate.swift index 3401186a0..1cd464b02 100644 --- a/Frameworks/Account/CloudKit/CloudKitAccountDelegate.swift +++ b/Frameworks/Account/CloudKit/CloudKitAccountDelegate.swift @@ -460,6 +460,8 @@ final class CloudKitAccountDelegate: AccountDelegate { accountZone.delegate = CloudKitAcountZoneDelegate(account: account, refreshProgress: refreshProgress, articlesZone: articlesZone) articlesZone.delegate = CloudKitArticlesZoneDelegate(account: account, database: database, articlesZone: articlesZone) + database.resetAllSelectedForProcessing() + // Check to see if this is a new account and initialize anything we need if account.externalID == nil { accountZone.findOrCreateAccount() { result in diff --git a/Frameworks/SyncDatabase/SyncDatabase.swift b/Frameworks/SyncDatabase/SyncDatabase.swift index 7790193e9..c5fcccd70 100644 --- a/Frameworks/SyncDatabase/SyncDatabase.swift +++ b/Frameworks/SyncDatabase/SyncDatabase.swift @@ -52,6 +52,10 @@ public struct SyncDatabase { syncStatusTable.selectPendingStarredStatusArticleIDs(completion: completion) } + public func resetAllSelectedForProcessing(completion: DatabaseCompletionBlock? = nil) { + syncStatusTable.resetAllSelectedForProcessing(completion: completion) + } + public func resetSelectedForProcessing(_ articleIDs: [String], completion: DatabaseCompletionBlock? = nil) { syncStatusTable.resetSelectedForProcessing(articleIDs, completion: completion) } diff --git a/Frameworks/SyncDatabase/SyncStatusTable.swift b/Frameworks/SyncDatabase/SyncStatusTable.swift index a0be0e8d2..3bda3c86d 100644 --- a/Frameworks/SyncDatabase/SyncStatusTable.swift +++ b/Frameworks/SyncDatabase/SyncStatusTable.swift @@ -91,6 +91,24 @@ struct SyncStatusTable: DatabaseTable { selectPendingArticleIDsAsync(.starred, completion) } + func resetAllSelectedForProcessing(completion: DatabaseCompletionBlock? = nil) { + queue.runInTransaction { databaseResult in + + func makeDatabaseCall(_ database: FMDatabase) { + let updateSQL = "update syncStatus set selected = false" + database.executeUpdate(updateSQL, withArgumentsIn: nil) + } + + switch databaseResult { + case .success(let database): + makeDatabaseCall(database) + callCompletion(completion, nil) + case .failure(let databaseError): + callCompletion(completion, databaseError) + } + } + } + func resetSelectedForProcessing(_ articleIDs: [String], completion: DatabaseCompletionBlock? = nil) { queue.runInTransaction { databaseResult in