diff --git a/Frameworks/SyncDatabase/SyncDatabase.swift b/Frameworks/SyncDatabase/SyncDatabase.swift index b0a1570ee..975bc5607 100644 --- a/Frameworks/SyncDatabase/SyncDatabase.swift +++ b/Frameworks/SyncDatabase/SyncDatabase.swift @@ -10,6 +10,9 @@ import Foundation import RSCore import RSDatabase +public typealias SyncStatusesResult = Result, DatabaseError> +public typealias SyncStatusesCompletionBlock = (SyncStatusesResult) -> Void + public struct SyncDatabase { private let syncStatusTable: SyncStatusTable @@ -30,8 +33,8 @@ public struct SyncDatabase { syncStatusTable.insertStatuses(statuses, completion: completion) } - public func selectForProcessing() throws -> [SyncStatus] { - return try syncStatusTable.selectForProcessing() + public func selectForProcessing(completion: @escaping SyncStatusesCompletionBlock) { + return syncStatusTable.selectForProcessing(completion) } public func selectPendingCount(completion: @escaping DatabaseIntCompletionBlock) { diff --git a/Frameworks/SyncDatabase/SyncStatusTable.swift b/Frameworks/SyncDatabase/SyncStatusTable.swift index 2cb6c0133..04100c783 100644 --- a/Frameworks/SyncDatabase/SyncStatusTable.swift +++ b/Frameworks/SyncDatabase/SyncStatusTable.swift @@ -20,11 +20,10 @@ struct SyncStatusTable: DatabaseTable { self.queue = queue } - func selectForProcessing() throws -> [SyncStatus] { - var statuses: Set? = nil - var error: DatabaseError? - - queue.runInTransactionSync { databaseResult in + func selectForProcessing(_ completion: @escaping SyncStatusesCompletionBlock) { + queue.runInTransaction { databaseResult in + var statuses = Set() + var error: DatabaseError? func makeDatabaseCall(_ database: FMDatabase) { let updateSQL = "update syncStatus set selected = true" @@ -42,12 +41,16 @@ struct SyncStatusTable: DatabaseTable { case .failure(let databaseError): error = databaseError } - } - if let error = error { - throw(error) + DispatchQueue.main.async { + if let error = error { + completion(.failure(error)) + } + else { + completion(.success(Array(statuses))) + } + } } - return statuses != nil ? Array(statuses!) : [SyncStatus]() } func selectPendingCount(_ completion: @escaping DatabaseIntCompletionBlock) {