mirror of
https://github.com/kkebo/DNSecure.git
synced 2026-03-11 08:54:36 +00:00
Merge pull request #21 from kkk669/refine-sync
Refine sync with NEDNSSettingsManager
This commit is contained in:
commit
b76726eab2
1 changed files with 50 additions and 61 deletions
|
|
@ -9,6 +9,7 @@ import NetworkExtension
|
|||
import SwiftUI
|
||||
|
||||
struct ContentView {
|
||||
@Environment(\.scenePhase) var scenePhase
|
||||
@AppStorage("servers") var servers = Presets.servers
|
||||
@AppStorage("usedID") var usedID: String?
|
||||
@State var isEnabled = false
|
||||
|
|
@ -46,7 +47,6 @@ struct ContentView {
|
|||
)
|
||||
}
|
||||
self.servers.remove(atOffsets: indexSet)
|
||||
self.syncSettings()
|
||||
}
|
||||
|
||||
func moveServers(from src: IndexSet, to dst: Int) {
|
||||
|
|
@ -55,61 +55,55 @@ struct ContentView {
|
|||
}
|
||||
|
||||
func updateStatus() {
|
||||
#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
|
||||
}
|
||||
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 syncSettings() {
|
||||
#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
|
||||
}
|
||||
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
|
||||
}
|
||||
logger.error("\(saveError.localizedDescription)")
|
||||
self.alert("Save Error", saveError.localizedDescription)
|
||||
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.debug("DNS settings was saved")
|
||||
}
|
||||
} else {
|
||||
guard manager.dnsSettings != nil else {
|
||||
logger.error("\(saveError.localizedDescription)")
|
||||
self.alert("Save Error", saveError.localizedDescription)
|
||||
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")
|
||||
logger.debug("DNS settings was saved")
|
||||
}
|
||||
} else {
|
||||
guard manager.dnsSettings != nil else {
|
||||
return
|
||||
}
|
||||
manager.removeFromPreferences { removeError in
|
||||
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) {
|
||||
|
|
@ -131,7 +125,6 @@ extension ContentView: View {
|
|||
get: { server },
|
||||
set: {
|
||||
self.servers[i] = $0
|
||||
self.syncSettings()
|
||||
}
|
||||
),
|
||||
isOn: .init(
|
||||
|
|
@ -139,12 +132,7 @@ extension ContentView: View {
|
|||
self.usedID == server.id.uuidString
|
||||
},
|
||||
set: {
|
||||
if $0 {
|
||||
self.usedID = server.id.uuidString
|
||||
} else {
|
||||
self.usedID = nil
|
||||
}
|
||||
self.syncSettings()
|
||||
self.usedID = $0 ? server.id.uuidString : nil
|
||||
}
|
||||
)
|
||||
),
|
||||
|
|
@ -197,14 +185,6 @@ extension ContentView: View {
|
|||
}
|
||||
}
|
||||
}
|
||||
.onAppear(perform: self.updateStatus)
|
||||
.onReceive(
|
||||
NotificationCenter.default.publisher(
|
||||
for: UIScene.willEnterForegroundNotification
|
||||
)
|
||||
) { _ in
|
||||
self.updateStatus()
|
||||
}
|
||||
}
|
||||
}
|
||||
.alert(isPresented: self.$alertIsPresented) {
|
||||
|
|
@ -221,6 +201,15 @@ extension ContentView: View {
|
|||
.navigationBarHidden(true)
|
||||
}
|
||||
}
|
||||
.onChange(of: self.scenePhase) { phase in
|
||||
#if !targetEnvironment(simulator)
|
||||
if phase == .active {
|
||||
self.updateStatus()
|
||||
} else {
|
||||
self.saveSettings()
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue