Merge pull request #26 from kkk669/refine-sync2

Refine sync with NEDNSSettingsManager
This commit is contained in:
Kenta Kubo 2020-12-20 20:09:37 +09:00 committed by GitHub
commit 993c03a756
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -46,6 +46,9 @@ struct ContentView {
self.servers.count - 1 - indexSet.count 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.servers.remove(atOffsets: indexSet)
} }
@ -55,55 +58,63 @@ struct ContentView {
} }
func updateStatus() { func updateStatus() {
let manager = NEDNSSettingsManager.shared() #if !targetEnvironment(simulator)
manager.loadFromPreferences { let manager = NEDNSSettingsManager.shared()
if let err = $0 { manager.loadFromPreferences {
logger.error("\(err.localizedDescription)") if let err = $0 {
self.alert("Load Error", err.localizedDescription) logger.error("\(err.localizedDescription)")
} else { self.alert("Load Error", err.localizedDescription)
self.isEnabled = manager.isEnabled } else {
self.isEnabled = manager.isEnabled
}
} }
} #endif
} }
func saveSettings() { func saveSettings(of server: Resolver) {
let manager = NEDNSSettingsManager.shared() if self.usedID != server.id.uuidString {
manager.loadFromPreferences { loadError in self.usedID = server.id.uuidString
if let loadError = loadError { }
logger.error("\(loadError.localizedDescription)")
self.alert("Load Error", loadError.localizedDescription) #if !targetEnvironment(simulator)
return let manager = NEDNSSettingsManager.shared()
} manager.dnsSettings = server.configuration.toDNSSettings()
if let usedID = self.usedID, manager.saveToPreferences { saveError in
let uuid = UUID(uuidString: usedID), if let saveError = saveError as NSError? {
let server = self.servers.find(by: uuid) { guard saveError.domain != "NEConfigurationErrorDomain"
manager.dnsSettings = server.configuration.toDNSSettings() || saveError.code != 9 else {
manager.saveToPreferences { saveError in // Nothing was changed
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 return
} }
logger.debug("DNS settings was saved") logger.error("\(saveError.localizedDescription)")
} self.alert("Save Error", saveError.localizedDescription)
} else { self.removeSettings()
guard manager.dnsSettings != nil else {
return return
} }
manager.removeFromPreferences { removeError in logger.debug("DNS settings was saved")
if let removeError = removeError {
logger.error("\(removeError.localizedDescription)")
self.alert("Remove Error", removeError.localizedDescription)
return
}
logger.debug("DNS settings was removed")
}
} }
} #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
} }
func alert(_ title: String, _ message: String) { func alert(_ title: String, _ message: String) {
@ -125,6 +136,11 @@ extension ContentView: View {
get: { server }, get: { server },
set: { set: {
self.servers[i] = $0 self.servers[i] = $0
let server = self.servers[i]
if server.id.uuidString == self.usedID {
self.saveSettings(of: server)
}
} }
), ),
isOn: .init( isOn: .init(
@ -132,7 +148,11 @@ extension ContentView: View {
self.usedID == server.id.uuidString self.usedID == server.id.uuidString
}, },
set: { set: {
self.usedID = $0 ? server.id.uuidString : nil if $0 {
self.saveSettings(of: server)
} else {
self.removeSettings()
}
} }
) )
), ),
@ -202,13 +222,9 @@ extension ContentView: View {
} }
} }
.onChange(of: self.scenePhase) { phase in .onChange(of: self.scenePhase) { phase in
#if !targetEnvironment(simulator) if phase == .active {
if phase == .active { self.updateStatus()
self.updateStatus() }
} else {
self.saveSettings()
}
#endif
} }
} }
} }