Make sync status inserts async when done during the scope of a iCloud sync

This commit is contained in:
Maurice Parker
2020-05-28 16:24:10 -05:00
parent 9253222f96
commit 8a03a26a10
5 changed files with 95 additions and 37 deletions

View File

@@ -36,6 +36,10 @@ public struct SyncDatabase {
try syncStatusTable.insertStatuses(statuses)
}
public func insertStatuses(_ statuses: [SyncStatus], completion: @escaping DatabaseCompletionBlock) {
syncStatusTable.insertStatuses(statuses, completion: completion)
}
public func selectForProcessing(limit: Int? = nil, completion: @escaping SyncStatusesCompletionBlock) {
return syncStatusTable.selectForProcessing(limit: limit, completion: completion)
}

View File

@@ -168,6 +168,25 @@ struct SyncStatusTable: DatabaseTable {
throw error
}
}
func insertStatuses(_ statuses: [SyncStatus], completion: @escaping DatabaseCompletionBlock) {
queue.runInTransaction { databaseResult in
func makeDatabaseCall(_ database: FMDatabase) {
let statusArray = statuses.map { $0.databaseDictionary() }
self.insertRows(statusArray, insertType: .orReplace, in: database)
}
switch databaseResult {
case .success(let database):
makeDatabaseCall(database)
completion(nil)
case .failure(let databaseError):
completion(databaseError)
}
}
}
}
private extension SyncStatusTable {