From 587adf39b4900800b948f33c26fd1a19d2a83a55 Mon Sep 17 00:00:00 2001 From: Benjamin Erhart Date: Fri, 29 May 2026 15:48:16 +0200 Subject: [PATCH] Issues #7, #8: Removed UserDefaults again. NEDNSSettingsManager is our source of truth. Update automatically, when user changes blocklist. --- dns/Settings.swift | 24 -------------- dns/ViewModel.swift | 76 ++++++--------------------------------------- 2 files changed, 9 insertions(+), 91 deletions(-) delete mode 100644 dns/Settings.swift diff --git a/dns/Settings.swift b/dns/Settings.swift deleted file mode 100644 index 1d4a914..0000000 --- a/dns/Settings.swift +++ /dev/null @@ -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) - } - } -} diff --git a/dns/ViewModel.swift b/dns/ViewModel.swift index 64e9782..a79fc5f 100644 --- a/dns/ViewModel.swift +++ b/dns/ViewModel.swift @@ -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 - } - } - } }