From 17bfcd45460afde93c2c4a5dd847c719fe2f1fee Mon Sep 17 00:00:00 2001 From: Kenta Kubo <601636+kkk669@users.noreply.github.com> Date: Sun, 20 Dec 2020 19:12:12 +0900 Subject: [PATCH 1/2] Revert #21 --- DNSecure/ContentView.swift | 98 ++++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 47 deletions(-) diff --git a/DNSecure/ContentView.swift b/DNSecure/ContentView.swift index e11e0a9..be584e5 100644 --- a/DNSecure/ContentView.swift +++ b/DNSecure/ContentView.swift @@ -47,6 +47,7 @@ struct ContentView { ) } self.servers.remove(atOffsets: indexSet) + self.saveSettings() } func moveServers(from src: IndexSet, to dst: Int) { @@ -55,55 +56,60 @@ struct ContentView { } func updateStatus() { - let manager = NEDNSSettingsManager.shared() - manager.loadFromPreferences { - if let err = $0 { - logger.error("\(err.localizedDescription)") - self.alert("Load Error", err.localizedDescription) - } else { - self.isEnabled = manager.isEnabled + #if !targetEnvironment(simulator) + let manager = NEDNSSettingsManager.shared() + manager.loadFromPreferences { + if let err = $0 { + logger.error("\(err.localizedDescription)") + self.alert("Load Error", err.localizedDescription) + } else { + self.isEnabled = manager.isEnabled + } } - } + #endif } func saveSettings() { - let manager = NEDNSSettingsManager.shared() - manager.loadFromPreferences { loadError in - if let loadError = loadError { - logger.error("\(loadError.localizedDescription)") - self.alert("Load Error", loadError.localizedDescription) - return - } - if let usedID = self.usedID, - let uuid = UUID(uuidString: usedID), - let server = self.servers.find(by: uuid) { - manager.dnsSettings = server.configuration.toDNSSettings() - manager.saveToPreferences { saveError in - if let saveError = saveError as NSError? { - guard saveError.domain != "NEConfigurationErrorDomain" - || saveError.code != 9 else { - return - } - logger.error("\(saveError.localizedDescription)") - self.alert("Save Error", saveError.localizedDescription) - return - } - logger.debug("DNS settings was saved") - } - } else { - guard manager.dnsSettings != nil else { + #if !targetEnvironment(simulator) + let manager = NEDNSSettingsManager.shared() + manager.loadFromPreferences { loadError in + if let loadError = loadError { + logger.error("\(loadError.localizedDescription)") + self.alert("Load Error", loadError.localizedDescription) return } - manager.removeFromPreferences { removeError in - if let removeError = removeError { - logger.error("\(removeError.localizedDescription)") - self.alert("Remove Error", removeError.localizedDescription) - return + if let usedID = self.usedID, + let uuid = UUID(uuidString: usedID), + let server = self.servers.find(by: uuid) { + manager.dnsSettings = server.configuration.toDNSSettings() + manager.saveToPreferences { saveError in + self.updateStatus() + if let saveError = saveError as NSError? { + guard saveError.domain != "NEConfigurationErrorDomain" + || saveError.code != 9 else { + return + } + self.usedID = nil + logger.error("\(saveError.localizedDescription)") + self.alert("Save Error", saveError.localizedDescription) + return + } + logger.debug("DNS settings was saved") + } + } else if manager.dnsSettings != nil { + self.usedID = nil + manager.removeFromPreferences { removeError in + self.updateStatus() + if let removeError = removeError { + logger.error("\(removeError.localizedDescription)") + self.alert("Remove Error", removeError.localizedDescription) + return + } + logger.debug("DNS settings was removed") } - logger.debug("DNS settings was removed") } } - } + #endif } func alert(_ title: String, _ message: String) { @@ -125,6 +131,7 @@ extension ContentView: View { get: { server }, set: { self.servers[i] = $0 + self.saveSettings() } ), isOn: .init( @@ -133,6 +140,7 @@ extension ContentView: View { }, set: { self.usedID = $0 ? server.id.uuidString : nil + self.saveSettings() } ) ), @@ -202,13 +210,9 @@ extension ContentView: View { } } .onChange(of: self.scenePhase) { phase in - #if !targetEnvironment(simulator) - if phase == .active { - self.updateStatus() - } else { - self.saveSettings() - } - #endif + if phase == .active { + self.updateStatus() + } } } } From b5a955c3fbadc9d099e1f7af1cbd545cb75d4d87 Mon Sep 17 00:00:00 2001 From: Kenta Kubo <601636+kkk669@users.noreply.github.com> Date: Sun, 20 Dec 2020 20:04:50 +0900 Subject: [PATCH 2/2] Refine sync with NEDNSSettingsManager --- DNSecure/ContentView.swift | 88 ++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 38 deletions(-) diff --git a/DNSecure/ContentView.swift b/DNSecure/ContentView.swift index be584e5..8d055a5 100644 --- a/DNSecure/ContentView.swift +++ b/DNSecure/ContentView.swift @@ -46,8 +46,10 @@ struct ContentView { self.servers.count - 1 - indexSet.count ) } + if indexSet.map({ self.servers[$0].id.uuidString }).contains(self.usedID) { + self.removeSettings() + } self.servers.remove(atOffsets: indexSet) - self.saveSettings() } func moveServers(from src: IndexSet, to dst: Int) { @@ -69,45 +71,48 @@ struct ContentView { #endif } - func saveSettings() { + func saveSettings(of server: Resolver) { + if self.usedID != server.id.uuidString { + self.usedID = server.id.uuidString + } + #if !targetEnvironment(simulator) let manager = NEDNSSettingsManager.shared() - manager.loadFromPreferences { loadError in - if let loadError = loadError { - logger.error("\(loadError.localizedDescription)") - self.alert("Load Error", loadError.localizedDescription) + manager.dnsSettings = server.configuration.toDNSSettings() + manager.saveToPreferences { saveError in + if let saveError = saveError as NSError? { + guard saveError.domain != "NEConfigurationErrorDomain" + || saveError.code != 9 else { + // Nothing was changed + return + } + logger.error("\(saveError.localizedDescription)") + self.alert("Save Error", saveError.localizedDescription) + self.removeSettings() return } - if let usedID = self.usedID, - let uuid = UUID(uuidString: usedID), - let server = self.servers.find(by: uuid) { - manager.dnsSettings = server.configuration.toDNSSettings() - manager.saveToPreferences { saveError in - self.updateStatus() - if let saveError = saveError as NSError? { - guard saveError.domain != "NEConfigurationErrorDomain" - || saveError.code != 9 else { - return - } - self.usedID = nil - logger.error("\(saveError.localizedDescription)") - self.alert("Save Error", saveError.localizedDescription) - return - } - logger.debug("DNS settings was saved") - } - } else if manager.dnsSettings != nil { - self.usedID = nil - manager.removeFromPreferences { removeError in - self.updateStatus() - if let removeError = removeError { - logger.error("\(removeError.localizedDescription)") - self.alert("Remove Error", removeError.localizedDescription) - return - } - logger.debug("DNS settings was removed") - } + logger.debug("DNS settings was saved") + } + #endif + } + + func removeSettings() { + self.usedID = nil + + #if !targetEnvironment(simulator) + let manager = NEDNSSettingsManager.shared() + guard manager.dnsSettings != nil else { + // Already removed + return + } + manager.removeFromPreferences { removeError in + self.updateStatus() + if let removeError = removeError { + logger.error("\(removeError.localizedDescription)") + self.alert("Remove Error", removeError.localizedDescription) + return } + logger.debug("DNS settings was removed") } #endif } @@ -131,7 +136,11 @@ extension ContentView: View { get: { server }, set: { self.servers[i] = $0 - self.saveSettings() + + let server = self.servers[i] + if server.id.uuidString == self.usedID { + self.saveSettings(of: server) + } } ), isOn: .init( @@ -139,8 +148,11 @@ extension ContentView: View { self.usedID == server.id.uuidString }, set: { - self.usedID = $0 ? server.id.uuidString : nil - self.saveSettings() + if $0 { + self.saveSettings(of: server) + } else { + self.removeSettings() + } } ) ),