From 2ddb87407132a0680a51acfde3b0be412d26450e Mon Sep 17 00:00:00 2001 From: Xin Liu Date: Mon, 23 Sep 2024 23:00:47 -0700 Subject: [PATCH] Improve the logic to ensure templateSettings.json is free of dirty data --- Planet/Entities/MyPlanetModel.swift | 21 +++++++++++++++++++ Planet/Views/My/MyPlanetEditView.swift | 1 - .../My/MyPlanetTemplateSettingsView.swift | 1 - Planet/versioning.xcconfig | 2 +- PlanetLite/Croptop/MintSettings.swift | 1 - 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Planet/Entities/MyPlanetModel.swift b/Planet/Entities/MyPlanetModel.swift index 84e0f15e3..6844bbf21 100644 --- a/Planet/Entities/MyPlanetModel.swift +++ b/Planet/Entities/MyPlanetModel.swift @@ -308,6 +308,13 @@ class MyPlanetModel: Equatable, Hashable, Identifiable, ObservableObject, Codabl touched = true } } + // Remove settings not in default + for (key, value) in currentSettings { + if defaultSettings[key] == nil { + currentSettings.removeValue(forKey: key) + touched = true + } + } if touched { let data = try JSONSerialization.data(withJSONObject: currentSettings, options: [.prettyPrinted, .sortedKeys]) try data.write(to: templateSettingsPath) @@ -323,6 +330,18 @@ class MyPlanetModel: Equatable, Hashable, Identifiable, ObservableObject, Codabl do { // Read current settings var currentSettings: [String: String] = templateSettings() + // Default settings + let defaultSettings: [String: String] = self.template?.defaultSettings() ?? [:] + // Remove settings not in default + for (key, value) in currentSettings { + debugPrint("Template Settings: Checking setting \(key)") + if defaultSettings[key] == nil { + currentSettings.removeValue(forKey: key) + debugPrint("Template Settings: Removing setting \(key)") + } else { + debugPrint("Template Settings: Keeping setting \(key)") + } + } // Update settings for (key, value) in settings { currentSettings[key] = value @@ -330,6 +349,8 @@ class MyPlanetModel: Equatable, Hashable, Identifiable, ObservableObject, Codabl // Write settings let data = try JSONSerialization.data(withJSONObject: currentSettings, options: [.prettyPrinted, .sortedKeys]) try data.write(to: templateSettingsPath) + + try self.copyTemplateSettings() } catch { debugPrint("Error updating template settings: \(error) \(settings)") diff --git a/Planet/Views/My/MyPlanetEditView.swift b/Planet/Views/My/MyPlanetEditView.swift index 27136be77..1baf18248 100644 --- a/Planet/Views/My/MyPlanetEditView.swift +++ b/Planet/Views/My/MyPlanetEditView.swift @@ -800,7 +800,6 @@ struct MyPlanetEditView: View { planet.filebaseAPIToken = filebaseAPIToken Task { planet.updateTemplateSettings(settings: userSettings) - try? planet.copyTemplateSettings() try planet.save() Task(priority: .background) { try await planet.rebuild() diff --git a/Planet/Views/My/MyPlanetTemplateSettingsView.swift b/Planet/Views/My/MyPlanetTemplateSettingsView.swift index dd5adbad7..614e92c8a 100644 --- a/Planet/Views/My/MyPlanetTemplateSettingsView.swift +++ b/Planet/Views/My/MyPlanetTemplateSettingsView.swift @@ -187,7 +187,6 @@ struct MyPlanetTemplateSettingsView: View { Button { Task.detached(priority: .userInitiated) { await planet.updateTemplateSettings(settings: userSettings) - try? await planet.copyTemplateSettings() try await planet.save() Task(priority: .background) { try await planet.rebuild() diff --git a/Planet/versioning.xcconfig b/Planet/versioning.xcconfig index 16dd2944d..6f1168ee1 100644 --- a/Planet/versioning.xcconfig +++ b/Planet/versioning.xcconfig @@ -1 +1 @@ -CURRENT_PROJECT_VERSION = 2248 +CURRENT_PROJECT_VERSION = 2249 diff --git a/PlanetLite/Croptop/MintSettings.swift b/PlanetLite/Croptop/MintSettings.swift index d2d057d80..adb32e29c 100644 --- a/PlanetLite/Croptop/MintSettings.swift +++ b/PlanetLite/Croptop/MintSettings.swift @@ -102,7 +102,6 @@ struct MintSettings: View { debugPrint("Template-level user settings: \(userSettings)") Task { planet.updateTemplateSettings(settings: userSettings) - try? planet.copyTemplateSettings() try await planet.publish() } dismiss()