From 3e97e5c9516b2536813eb9fd111ebacd7645f37e Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Wed, 15 Nov 2023 14:38:06 -0600 Subject: [PATCH] =?UTF-8?q?[ExpFeat]=20Adds=20=E2=80=9CRepair=20Database?= =?UTF-8?q?=E2=80=9D=20to=20explicitly=20repair=20database?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Disables automatic database repairing at app launch. --- .../ExperimentalFeatures.swift | 4 +++ Delta/Launch/LaunchViewController.swift | 27 +++---------------- Delta/Settings/Settings.swift | 15 ++++++----- 3 files changed, 15 insertions(+), 31 deletions(-) diff --git a/Delta/Experimental Features/ExperimentalFeatures.swift b/Delta/Experimental Features/ExperimentalFeatures.swift index 571010f..721d849 100644 --- a/Delta/Experimental Features/ExperimentalFeatures.swift +++ b/Delta/Experimental Features/ExperimentalFeatures.swift @@ -41,6 +41,10 @@ struct ExperimentalFeatures: FeatureContainer options: ReviewSaveStatesOptions()) var reviewSaveStates + @Feature(name: "Repair Database", + description: "Repair invalid relationships in Delta's game database on next app launch.") + var repairDatabase + @Feature(name: "Alternate App Icon", description: "Change the app icon.", options: AlternateAppIconOptions()) diff --git a/Delta/Launch/LaunchViewController.swift b/Delta/Launch/LaunchViewController.swift index 026f8c4..13b1774 100644 --- a/Delta/Launch/LaunchViewController.swift +++ b/Delta/Launch/LaunchViewController.swift @@ -78,33 +78,12 @@ extension LaunchViewController // Repair database _after_ starting SyncManager so we can access RecordController. let isDatabaseRepaired = RSTLaunchCondition(condition: { !UserDefaults.standard.shouldRepairDatabase }) { completionHandler in - func finish() - { - UserDefaults.standard.shouldRepairDatabase = false - completionHandler(nil) - } - - do - { - let fetchRequest = Game.fetchRequest() - fetchRequest.fetchLimit = 1 - - let isDatabaseEmpty = try DatabaseManager.shared.viewContext.count(for: fetchRequest) == 0 - guard !isDatabaseEmpty else { - // Database has no games, so no need to repair database. - finish() - return - } - } - catch - { - print("Failed to fetch games at launch, repairing database just to be safe.", error) - } - let repairViewController = RepairDatabaseViewController() repairViewController.completionHandler = { [weak repairViewController] in repairViewController?.dismiss(animated: true) - finish() + + UserDefaults.standard.shouldRepairDatabase = false + completionHandler(nil) } let navigationController = UINavigationController(rootViewController: repairViewController) diff --git a/Delta/Settings/Settings.swift b/Delta/Settings/Settings.swift index 8ef49e1..63370d8 100644 --- a/Delta/Settings/Settings.swift +++ b/Delta/Settings/Settings.swift @@ -53,7 +53,7 @@ struct Settings static func registerDefaults() { - var defaults = [#keyPath(UserDefaults.translucentControllerSkinOpacity): 0.7, + let defaults = [#keyPath(UserDefaults.translucentControllerSkinOpacity): 0.7, #keyPath(UserDefaults.gameShortcutsMode): GameShortcutsMode.recent.rawValue, #keyPath(UserDefaults.isButtonHapticFeedbackEnabled): true, #keyPath(UserDefaults.isThumbstickHapticFeedbackEnabled): true, @@ -63,12 +63,7 @@ struct Settings #keyPath(UserDefaults.respectSilentMode): true, Settings.preferredCoreSettingsKey(for: .ds): MelonDS.core.identifier] as [String : Any] - #if BETA - - // Assume we need to repair database relationships until explicitly set to false. - defaults[#keyPath(UserDefaults.shouldRepairDatabase)] = true - - #else + #if !BETA // Manually set MelonDS as preferred DS core in case DeSmuME is cached from a previous version. UserDefaults.standard.set(MelonDS.core.identifier, forKey: Settings.preferredCoreSettingsKey(for: .ds)) @@ -77,6 +72,12 @@ struct Settings #endif UserDefaults.standard.register(defaults: defaults) + + if ExperimentalFeatures.shared.repairDatabase.isEnabled + { + UserDefaults.standard.shouldRepairDatabase = true + ExperimentalFeatures.shared.repairDatabase.isEnabled = false // Disable so we only repair database once. + } } }