diff --git a/ios/App/Shared/models/DeviceSettings.swift b/ios/App/Shared/models/DeviceSettings.swift index 34d29bd6..16e1fd54 100644 --- a/ios/App/Shared/models/DeviceSettings.swift +++ b/ios/App/Shared/models/DeviceSettings.swift @@ -21,12 +21,10 @@ func getDefaultDeviceSettings() -> DeviceSettings { } func deviceSettingsToJSON(settings: DeviceSettings) -> Dictionary { - return Database.realmQueue.sync { - return [ - "disableAutoRewind": settings.disableAutoRewind, - "enableAltView": settings.enableAltView, - "jumpBackwardsTime": settings.jumpBackwardsTime, - "jumpForwardTime": settings.jumpForwardTime - ] - } + return [ + "disableAutoRewind": settings.disableAutoRewind, + "enableAltView": settings.enableAltView, + "jumpBackwardsTime": settings.jumpBackwardsTime, + "jumpForwardTime": settings.jumpForwardTime + ] } diff --git a/ios/App/Shared/models/ServerConnectionConfig.swift b/ios/App/Shared/models/ServerConnectionConfig.swift index 117500fc..3f579fed 100644 --- a/ios/App/Shared/models/ServerConnectionConfig.swift +++ b/ios/App/Shared/models/ServerConnectionConfig.swift @@ -37,15 +37,13 @@ struct ServerConnectionConfigActiveIndex: Realmable { } func convertServerConnectionConfigToJSON(config: ServerConnectionConfig) -> Dictionary { - return Database.realmQueue.sync { - return [ - "id": config.id, - "name": config.name, - "index": config.index, - "address": config.address, - "userId": config.userId, - "username": config.username, - "token": config.token, - ] - } + return [ + "id": config.id, + "name": config.name, + "index": config.index, + "address": config.address, + "userId": config.userId, + "username": config.username, + "token": config.token, + ] } diff --git a/ios/App/Shared/util/Database.swift b/ios/App/Shared/util/Database.swift index 542af63a..9f13c8b6 100644 --- a/ios/App/Shared/util/Database.swift +++ b/ios/App/Shared/util/Database.swift @@ -9,85 +9,74 @@ import Foundation import RealmSwift class Database { - // All DB releated actions must be executed on "realm-queue" - public static let realmQueue: DispatchQueue = DispatchQueue(label: "realm-queue") public static var shared = { - realmQueue.sync { - return Database() - } + return Database() }() - private var instance: Realm - private init() { - self.instance = try! Realm(queue: Database.realmQueue) - } + private init() {} public func setServerConnectionConfig(config: ServerConnectionConfig) { var config = config - Database.realmQueue.sync { - var existing: ServerConnectionConfig? = instance.object(ofType: ServerConnectionConfig.self, forPrimaryKey: config.id) + let realm = try! Realm() + let existing: ServerConnectionConfig? = realm.object(ofType: ServerConnectionConfig.self, forPrimaryKey: config.id) + + if config.index == 0 { + let lastConfig: ServerConnectionConfig? = realm.objects(ServerConnectionConfig.self).last - if config.index == 0 { - var lastConfig: ServerConnectionConfig? = instance.objects(ServerConnectionConfig.self).last - - if lastConfig != nil { - config.index = lastConfig!.index + 1 - } else { - config.index = 1 - } + if lastConfig != nil { + config.index = lastConfig!.index + 1 + } else { + config.index = 1 } - - do { - try instance.write { - if existing != nil { - instance.delete(existing!) - } - instance.add(config) - } - } catch(let exception) { - NSLog("failed to save server config") - debugPrint(exception) - } - - setLastActiveConfigIndex(index: config.index) } + + do { + try realm.write { + if existing != nil { + realm.delete(existing!) + } + realm.add(config) + } + } catch(let exception) { + NSLog("failed to save server config") + debugPrint(exception) + } + + setLastActiveConfigIndex(index: config.index) } public func deleteServerConnectionConfig(id: String) { - Database.realmQueue.sync { - let config = instance.object(ofType: ServerConnectionConfig.self, forPrimaryKey: id) - - do { - try instance.write { - if config != nil { - instance.delete(config!) - } + let realm = try! Realm() + let config = realm.object(ofType: ServerConnectionConfig.self, forPrimaryKey: id) + + do { + try realm.write { + if config != nil { + realm.delete(config!) } - } catch(let exception) { - NSLog("failed to delete server config") - debugPrint(exception) } + } catch(let exception) { + NSLog("failed to delete server config") + debugPrint(exception) } } public func getServerConnectionConfigs() -> [ServerConnectionConfig] { - Database.realmQueue.sync { - return Array(instance.objects(ServerConnectionConfig.self)) - } + let realm = try! Realm() + return Array(realm.objects(ServerConnectionConfig.self)) } public func setLastActiveConfigIndexToNil() { - Database.realmQueue.sync { - setLastActiveConfigIndex(index: nil) - } + setLastActiveConfigIndex(index: nil) } private func setLastActiveConfigIndex(index: Int?) { + let realm = try! Realm() do { - try instance.write { - var existing = instance.objects(ServerConnectionConfigActiveIndex.self).last ?? ServerConnectionConfigActiveIndex(index: index) + try realm.write { + var existing = realm.objects(ServerConnectionConfigActiveIndex.self).last ?? ServerConnectionConfigActiveIndex(index: index) existing.index = index - instance.add(existing, update: .modified) + realm.add(existing, update: .modified) } } catch(let exception) { NSLog("failed to save server config active index") @@ -96,127 +85,103 @@ class Database { } public func getLastActiveConfigIndex() -> Int? { - return Database.realmQueue.sync { - return instance.objects(ServerConnectionConfigActiveIndex.self).first?.index ?? nil - } + let realm = try! Realm() + return realm.objects(ServerConnectionConfigActiveIndex.self).first?.index ?? nil } public func setDeviceSettings(deviceSettings: DeviceSettings) { - Database.realmQueue.sync { - let existing = instance.objects(DeviceSettings.self) + let realm = try! Realm() + let existing = realm.objects(DeviceSettings.self) - do { - try instance.write { - instance.delete(existing) - instance.add(deviceSettings) - } - } catch(let exception) { - NSLog("failed to save device settings") + do { + try realm.write { + realm.delete(existing) + realm.add(deviceSettings) } + } catch { + NSLog("failed to save device settings") } } public func getLocalLibraryItems(mediaType: MediaType? = nil) -> [LocalLibraryItem] { - Database.realmQueue.sync { - Array(instance.objects(LocalLibraryItem.self)) - } + let realm = try! Realm() + return Array(realm.objects(LocalLibraryItem.self)) } public func getLocalLibraryItemByLLId(libraryItem: String) -> LocalLibraryItem? { - let items = getLocalLibraryItems() - for item in items { - if (item.libraryItemId == libraryItem) { - return item - } - } - NSLog("Local library item with id \(libraryItem) not found") - return nil + let realm = try! Realm() + return realm.objects(LocalLibraryItem.self).first(where: { $0.libraryItemId == libraryItem }) } public func getLocalLibraryItem(localLibraryItem: String) -> LocalLibraryItem? { - Database.realmQueue.sync { - instance.object(ofType: LocalLibraryItem.self, forPrimaryKey: localLibraryItem) - } + let realm = try! Realm() + return realm.object(ofType: LocalLibraryItem.self, forPrimaryKey: localLibraryItem) } public func saveLocalLibraryItem(localLibraryItem: LocalLibraryItem) { - Database.realmQueue.sync { - try! instance.write { instance.add(localLibraryItem) } - } + let realm = try! Realm() + try! realm.write { realm.add(localLibraryItem) } } public func getDownloadItem(downloadItemId: String) -> DownloadItem? { - Database.realmQueue.sync { - instance.object(ofType: DownloadItem.self, forPrimaryKey: downloadItemId) - } + let realm = try! Realm() + return realm.object(ofType: DownloadItem.self, forPrimaryKey: downloadItemId) } public func getDownloadItem(libraryItemId: String) -> DownloadItem? { - Database.realmQueue.sync { - instance.objects(DownloadItem.self).filter("libraryItemId == %@", libraryItemId).first - } + let realm = try! Realm() + return realm.objects(DownloadItem.self).filter("libraryItemId == %@", libraryItemId).first } public func getDownloadItem(downloadItemPartId: String) -> DownloadItem? { - Database.realmQueue.sync { - instance.objects(DownloadItem.self).filter("SUBQUERY(downloadItemParts, $part, $part.id == %@) .@count > 0", downloadItemPartId).first - } + let realm = try! Realm() + return realm.objects(DownloadItem.self).filter("SUBQUERY(downloadItemParts, $part, $part.id == %@) .@count > 0", downloadItemPartId).first } public func saveDownloadItem(_ downloadItem: DownloadItem) { - Database.realmQueue.sync { - try! instance.write { instance.add(downloadItem) } - } + let realm = try! Realm() + return try! realm.write { realm.add(downloadItem) } } public func updateDownloadItemPart(_ part: DownloadItemPart) { - Database.realmQueue.sync { - try! instance.write { - instance.add(part, update: .modified) - } - } + let realm = try! Realm() + return try! realm.write { realm.add(part, update: .modified) } } public func removeDownloadItem(_ downloadItem: DownloadItem) { - Database.realmQueue.sync { - try! instance.write { instance.delete(downloadItem) } - } + let realm = try! Realm() + return try! realm.write { realm.delete(downloadItem) } } public func getDeviceSettings() -> DeviceSettings { - return Database.realmQueue.sync { - return instance.objects(DeviceSettings.self).first ?? getDefaultDeviceSettings() - } + let realm = try! Realm() + return realm.objects(DeviceSettings.self).first ?? getDefaultDeviceSettings() } public func removeLocalLibraryItem(localLibraryItemId: String) { - Database.realmQueue.sync { - try! instance.write { - let item = getLocalLibraryItemByLLId(libraryItem: localLibraryItemId) - instance.delete(item!) - } + let realm = try! Realm() + try! realm.write { + let item = getLocalLibraryItemByLLId(libraryItem: localLibraryItemId) + realm.delete(item!) } } public func saveLocalMediaProgress(_ mediaProgress: LocalMediaProgress) { - Database.realmQueue.sync { - try! instance.write { instance.add(mediaProgress) } - } + let realm = try! Realm() + try! realm.write { realm.add(mediaProgress) } } // For books this will just be the localLibraryItemId for podcast episodes this will be "{localLibraryItemId}-{episodeId}" public func getLocalMediaProgress(localMediaProgressId: String) -> LocalMediaProgress? { - Database.realmQueue.sync { - instance.object(ofType: LocalMediaProgress.self, forPrimaryKey: localMediaProgressId) - } + let realm = try! Realm() + return realm.object(ofType: LocalMediaProgress.self, forPrimaryKey: localMediaProgressId) } public func removeLocalMediaProgress(localMediaProgressId: String) { - Database.realmQueue.sync { - try! instance.write { - let progress = instance.object(ofType: LocalMediaProgress.self, forPrimaryKey: localMediaProgressId) - instance.delete(progress!) - } + let realm = try! Realm() + try! realm.write { + let progress = realm.object(ofType: LocalMediaProgress.self, forPrimaryKey: localMediaProgressId) + realm.delete(progress!) } } } diff --git a/ios/App/Shared/util/Store.swift b/ios/App/Shared/util/Store.swift index 210664e1..e3eba891 100644 --- a/ios/App/Shared/util/Store.swift +++ b/ios/App/Shared/util/Store.swift @@ -21,9 +21,7 @@ class Store { Database.shared.setLastActiveConfigIndexToNil() } - Database.realmQueue.sync { - _serverConfig = updated - } + _serverConfig = updated } } }