Make SyncDatabase.resetSelectedForProcessing and .deleteSelectedForProcessing take Set parameter instead of Array.

This commit is contained in:
Brent Simmons 2024-05-14 21:05:33 -07:00
parent a474a8fc18
commit ab4d51b462
8 changed files with 17 additions and 16 deletions

@ -66,7 +66,7 @@ private extension CloudKitArticlesZoneDelegate {
return return
} }
try? await database.deleteSelectedForProcessing(Array(deletableArticleIDs)) try? await database.deleteSelectedForProcessing(deletableArticleIDs)
try? await account?.delete(articleIDs: deletableArticleIDs) try? await account?.delete(articleIDs: deletableArticleIDs)
} }

@ -729,11 +729,12 @@ private extension FeedbinAccountDelegate {
let articleIDGroups = articleIDs.chunked(into: 1000) let articleIDGroups = articleIDs.chunked(into: 1000)
for articleIDGroup in articleIDGroups { for articleIDGroup in articleIDGroups {
let articleIDsGroupAsString = Set(articleIDGroup.map { String($0) })
do { do {
try await apiCall(articleIDGroup) try await apiCall(articleIDGroup)
try? await database.deleteSelectedForProcessing(articleIDGroup.map { String($0) } ) try? await database.deleteSelectedForProcessing(articleIDsGroupAsString)
} catch { } catch {
try? await database.resetSelectedForProcessing(articleIDGroup.map { String($0) } ) try? await database.resetSelectedForProcessing(articleIDsGroupAsString)
localError = error localError = error
os_log(.error, log: self.log, "Article status sync call failed: %@.", error.localizedDescription) os_log(.error, log: self.log, "Article status sync call failed: %@.", error.localizedDescription)
} }

@ -563,9 +563,9 @@ final class FeedlyAccountDelegate: AccountDelegate {
do { do {
try await caller.mark(articleIDs, as: statusAction.action) try await caller.mark(articleIDs, as: statusAction.action)
try? await syncDatabase.deleteSelectedForProcessing(Array(articleIDs)) try? await syncDatabase.deleteSelectedForProcessing(articleIDs)
} catch { } catch {
try? await syncDatabase.resetSelectedForProcessing(Array(articleIDs)) try? await syncDatabase.resetSelectedForProcessing(articleIDs)
throw error throw error
} }
} }

@ -272,7 +272,7 @@ extension NewsBlurAccountDelegate {
} catch { } catch {
errorOccurred = true errorOccurred = true
os_log(.error, log: self.log, "Story status sync call failed: %@.", error.localizedDescription) os_log(.error, log: self.log, "Story status sync call failed: %@.", error.localizedDescription)
try? await syncDatabase.resetSelectedForProcessing(storyHashGroup.map { String($0) } ) try? await syncDatabase.resetSelectedForProcessing(Set(storyHashGroup))
} }
} }

@ -693,10 +693,10 @@ private extension ReaderAPIAccountDelegate {
do { do {
let _ = try await apiCall(articleIDGroup) let _ = try await apiCall(articleIDGroup)
try? await database.deleteSelectedForProcessing(articleIDGroup.map { $0 } ) try? await database.deleteSelectedForProcessing(Set(articleIDGroup))
} catch { } catch {
os_log(.error, log: self.log, "Article status sync call failed: %@.", error.localizedDescription) os_log(.error, log: self.log, "Article status sync call failed: %@.", error.localizedDescription)
try? await database.resetSelectedForProcessing(articleIDGroup.map { $0 } ) try? await database.resetSelectedForProcessing(Set(articleIDGroup))
} }
} }
} }

@ -142,7 +142,7 @@ private extension CloudKitSendStatusOperation {
// but the articles didn't come back in the fetch. We need to clean up those sync records // but the articles didn't come back in the fetch. We need to clean up those sync records
// and stop processing. // and stop processing.
if statusUpdates.isEmpty { if statusUpdates.isEmpty {
try? await self.database.deleteSelectedForProcessing(articleIDs) try? await self.database.deleteSelectedForProcessing(Set(articleIDs))
done(true) done(true)
return return
} }
@ -151,10 +151,10 @@ private extension CloudKitSendStatusOperation {
Task { @MainActor in Task { @MainActor in
switch result { switch result {
case .success: case .success:
try? await self.database.deleteSelectedForProcessing(statusUpdates.map({ $0.articleID })) try? await self.database.deleteSelectedForProcessing(Set(statusUpdates.map({ $0.articleID })))
done(false) done(false)
case .failure(let error): case .failure(let error):
try? await self.database.resetSelectedForProcessing(syncStatuses.map({ $0.articleID })) try? await self.database.resetSelectedForProcessing(Set(syncStatuses.map({ $0.articleID })))
self.processAccountError(error) self.processAccountError(error)
os_log(.error, log: self.log, "Send article status modify articles error: %@.", error.localizedDescription) os_log(.error, log: self.log, "Send article status modify articles error: %@.", error.localizedDescription)
completion(true) completion(true)
@ -162,7 +162,7 @@ private extension CloudKitSendStatusOperation {
} }
} }
} catch { } catch {
try? await self.database.resetSelectedForProcessing(syncStatuses.map({ $0.articleID })) try? await self.database.resetSelectedForProcessing(Set(syncStatuses.map({ $0.articleID })))
os_log(.error, log: self.log, "Send article status fetch articles error: %@.", error.localizedDescription) os_log(.error, log: self.log, "Send article status fetch articles error: %@.", error.localizedDescription)
completion(true) completion(true)
} }

@ -76,7 +76,7 @@ public actor SyncDatabase {
syncStatusTable.resetAllSelectedForProcessing(database: database) syncStatusTable.resetAllSelectedForProcessing(database: database)
} }
public func resetSelectedForProcessing(_ articleIDs: [String]) throws { public func resetSelectedForProcessing(_ articleIDs: Set<String>) throws {
guard let database else { guard let database else {
throw DatabaseError.suspended throw DatabaseError.suspended
@ -84,7 +84,7 @@ public actor SyncDatabase {
syncStatusTable.resetSelectedForProcessing(articleIDs, database: database) syncStatusTable.resetSelectedForProcessing(articleIDs, database: database)
} }
public func deleteSelectedForProcessing(_ articleIDs: [String]) throws { public func deleteSelectedForProcessing(_ articleIDs: Set<String>) throws {
guard let database else { guard let database else {
throw DatabaseError.suspended throw DatabaseError.suspended

@ -62,7 +62,7 @@ struct SyncStatusTable {
database.executeUpdateInTransaction(updateSQL) database.executeUpdateInTransaction(updateSQL)
} }
func resetSelectedForProcessing(_ articleIDs: [String], database: FMDatabase) { func resetSelectedForProcessing(_ articleIDs: Set<String>, database: FMDatabase) {
guard !articleIDs.isEmpty else { guard !articleIDs.isEmpty else {
return return
@ -75,7 +75,7 @@ struct SyncStatusTable {
database.executeUpdateInTransaction(updateSQL, withArgumentsIn: parameters) database.executeUpdateInTransaction(updateSQL, withArgumentsIn: parameters)
} }
func deleteSelectedForProcessing(_ articleIDs: [String], database: FMDatabase) { func deleteSelectedForProcessing(_ articleIDs: Set<String>, database: FMDatabase) {
guard !articleIDs.isEmpty else { guard !articleIDs.isEmpty else {
return return