Issues #7, #8: Removed UserDefaults again. NEDNSSettingsManager is our source of truth. Update automatically, when user changes blocklist.

This commit is contained in:
Benjamin Erhart 2026-05-29 15:48:16 +02:00
parent 0b2885461a
commit 587adf39b4
2 changed files with 9 additions and 91 deletions

View file

@ -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)
}
}
}

View file

@ -19,13 +19,16 @@ class ViewModel: NSObject, ObservableObject {
@Published
var blocklist: BlocklistOption = .secure {
didSet {
Settings.blocklist = blocklist
Task {
manager.dnsSettings = blocklist.settings
manager.localizedDescription = blocklist.title
if isDnsEnabled {
toggleDns()
}
else {
isProgrammaticChange = false
do {
try await manager.saveToPreferences()
}
catch {
log.error("Error storing preferences: \(error)")
}
}
}
}
@ -39,8 +42,6 @@ class ViewModel: NSObject, ObservableObject {
// MARK: Private Properties
private var isProgrammaticChange = false
private let manager = NEDNSSettingsManager.shared()
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
isProgrammaticChange = true
blocklist = Settings.blocklist
Task {
do {
try await manager.loadFromPreferences()
@ -66,10 +64,7 @@ class ViewModel: NSObject, ObservableObject {
for dnsServer in BlocklistOption.allCases {
if settings.servers.contains(dnsServer.ipv4) {
await MainActor.run {
isProgrammaticChange = true
blocklist = dnsServer
isProgrammaticChange = true
isDnsEnabled = true
}
break
@ -86,45 +81,6 @@ class ViewModel: NSObject, ObservableObject {
// 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 {
do {
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)")
}
}
// MARK: Private Methods
private func delayedToggle(_ enabled: Bool) {
Task {
try? await Task.sleep(nanoseconds: 500_000_000)
await MainActor.run {
isProgrammaticChange = true
isDnsEnabled = enabled
}
}
}
}