Issues #7, #8: Removed UserDefaults again. NEDNSSettingsManager is our source of truth. Update automatically, when user changes blocklist.
This commit is contained in:
parent
0b2885461a
commit
587adf39b4
2 changed files with 9 additions and 91 deletions
|
|
@ -1,24 +0,0 @@
|
||||||
//
|
|
||||||
// Settings.swift
|
|
||||||
// dns
|
|
||||||
//
|
|
||||||
// Created by Benjamin Erhart on 15.04.26.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
|
|
||||||
class Settings {
|
|
||||||
|
|
||||||
private static let blocklistKey = "blocklist"
|
|
||||||
|
|
||||||
private static let defaults = UserDefaults.standard
|
|
||||||
|
|
||||||
class var blocklist: BlocklistOption {
|
|
||||||
get {
|
|
||||||
BlocklistOption(rawValue: defaults.string(forKey: blocklistKey) ?? BlocklistOption.secure.rawValue) ?? .secure
|
|
||||||
}
|
|
||||||
set {
|
|
||||||
defaults.set(newValue.rawValue, forKey: blocklistKey)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -19,13 +19,16 @@ class ViewModel: NSObject, ObservableObject {
|
||||||
@Published
|
@Published
|
||||||
var blocklist: BlocklistOption = .secure {
|
var blocklist: BlocklistOption = .secure {
|
||||||
didSet {
|
didSet {
|
||||||
Settings.blocklist = blocklist
|
Task {
|
||||||
|
manager.dnsSettings = blocklist.settings
|
||||||
|
manager.localizedDescription = blocklist.title
|
||||||
|
|
||||||
if isDnsEnabled {
|
do {
|
||||||
toggleDns()
|
try await manager.saveToPreferences()
|
||||||
}
|
}
|
||||||
else {
|
catch {
|
||||||
isProgrammaticChange = false
|
log.error("Error storing preferences: \(error)")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -39,8 +42,6 @@ class ViewModel: NSObject, ObservableObject {
|
||||||
|
|
||||||
// MARK: Private Properties
|
// MARK: Private Properties
|
||||||
|
|
||||||
private var isProgrammaticChange = false
|
|
||||||
|
|
||||||
private let manager = NEDNSSettingsManager.shared()
|
private let manager = NEDNSSettingsManager.shared()
|
||||||
|
|
||||||
private let log = Logger(subsystem: String(describing: ViewModel.self), category: String(describing: ViewModel.self))
|
private let log = Logger(subsystem: String(describing: ViewModel.self), category: String(describing: ViewModel.self))
|
||||||
|
|
@ -51,9 +52,6 @@ class ViewModel: NSObject, ObservableObject {
|
||||||
|
|
||||||
isDnsEnabled = manager.isEnabled
|
isDnsEnabled = manager.isEnabled
|
||||||
|
|
||||||
isProgrammaticChange = true
|
|
||||||
blocklist = Settings.blocklist
|
|
||||||
|
|
||||||
Task {
|
Task {
|
||||||
do {
|
do {
|
||||||
try await manager.loadFromPreferences()
|
try await manager.loadFromPreferences()
|
||||||
|
|
@ -66,10 +64,7 @@ class ViewModel: NSObject, ObservableObject {
|
||||||
for dnsServer in BlocklistOption.allCases {
|
for dnsServer in BlocklistOption.allCases {
|
||||||
if settings.servers.contains(dnsServer.ipv4) {
|
if settings.servers.contains(dnsServer.ipv4) {
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
isProgrammaticChange = true
|
|
||||||
blocklist = dnsServer
|
blocklist = dnsServer
|
||||||
isProgrammaticChange = true
|
|
||||||
isDnsEnabled = true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break
|
break
|
||||||
|
|
@ -86,45 +81,6 @@ class ViewModel: NSObject, ObservableObject {
|
||||||
|
|
||||||
// MARK: Public Methods
|
// MARK: Public Methods
|
||||||
|
|
||||||
func toggleDns() {
|
|
||||||
guard !isProgrammaticChange else {
|
|
||||||
// Reset, so next one is recognized as coming from the user again.
|
|
||||||
isProgrammaticChange = false
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
Task {
|
|
||||||
if isDnsEnabled {
|
|
||||||
manager.dnsSettings = blocklist.settings
|
|
||||||
manager.localizedDescription = blocklist.title
|
|
||||||
|
|
||||||
do {
|
|
||||||
try await manager.saveToPreferences()
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
log.error("Error storing preferences: \(error)")
|
|
||||||
|
|
||||||
delayedToggle(false)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !manager.isEnabled {
|
|
||||||
delayedToggle(false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
do {
|
|
||||||
try await manager.removeFromPreferences()
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
log.error("Error removing preferences: \(error)")
|
|
||||||
|
|
||||||
delayedToggle(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func fetchServerStatus() async {
|
func fetchServerStatus() async {
|
||||||
do {
|
do {
|
||||||
let (data, _) = try await URLSession.shared.data(for: .init(url: .init(string: "https://status.sr2.uk/index.json")!))
|
let (data, _) = try await URLSession.shared.data(for: .init(url: .init(string: "https://status.sr2.uk/index.json")!))
|
||||||
|
|
@ -137,18 +93,4 @@ class ViewModel: NSObject, ObservableObject {
|
||||||
log.error("Error while checking status: \(error)")
|
log.error("Error while checking status: \(error)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: Private Methods
|
|
||||||
|
|
||||||
private func delayedToggle(_ enabled: Bool) {
|
|
||||||
Task {
|
|
||||||
try? await Task.sleep(nanoseconds: 500_000_000)
|
|
||||||
|
|
||||||
await MainActor.run {
|
|
||||||
isProgrammaticChange = true
|
|
||||||
isDnsEnabled = enabled
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue