Merge changes from mac-release — adopt DatabaseQueue.

This commit is contained in:
Brent Simmons
2019-11-29 22:17:32 -08:00
7 changed files with 91 additions and 60 deletions

View File

@@ -9,20 +9,27 @@
import Foundation
import RSDatabase
public final class SyncDatabase {
private let syncStatusTable: SyncStatusTable
public init(databaseFilePath: String) {
let queue = RSDatabaseQueue(filepath: databaseFilePath, excludeFromBackup: false)
self.syncStatusTable = SyncStatusTable(queue: queue)
queue.createTables(usingStatementsSync: SyncDatabase.tableCreationStatements)
queue.vacuumIfNeeded()
public struct SyncDatabase {
/// When SyncDatabase is suspended, database calls will crash the app.
public var isSuspended: Bool {
return queue.isSuspended
}
private let syncStatusTable: SyncStatusTable
private let queue: DatabaseQueue
public init(databaseFilePath: String) {
let queue = DatabaseQueue(databasePath: databaseFilePath)
queue.runCreateStatements(SyncDatabase.tableCreationStatements)
queue.vacuumIfNeeded(daysBetweenVacuums: 11)
self.queue = queue
self.syncStatusTable = SyncStatusTable(queue: queue)
}
// MARK: - API
public func insertStatuses(_ statuses: [SyncStatus], completionHandler: (() -> ())? = nil) {
syncStatusTable.insertStatuses(statuses, completionHandler: completionHandler)
}
@@ -42,7 +49,19 @@ public final class SyncDatabase {
public func deleteSelectedForProcessing(_ articleIDs: [String], completionHandler: (() -> ())? = nil) {
syncStatusTable.deleteSelectedForProcessing(articleIDs, completionHandler: completionHandler)
}
// MARK: - Suspend and Resume (for iOS)
/// Close the database and stop running database calls.
/// Any pending calls will complete first.
public func suspend() {
queue.suspend()
}
/// Open the database and allow for running database calls again.
public func resume() {
queue.resume()
}
}
// MARK: - Private