diff --git a/dns/HomeView.swift b/dns/HomeView.swift index 21dfa9b..71542f1 100644 --- a/dns/HomeView.swift +++ b/dns/HomeView.swift @@ -3,6 +3,9 @@ import SwiftUI struct HomeView: View { + @Environment(\.scenePhase) + private var scenePhase + @EnvironmentObject private var viewModel: ViewModel @@ -204,6 +207,13 @@ struct HomeView: View { } .navigationTitle(ViewModel.title) .animation(.default, value: viewModel.isDnsEnabled) + .onChange(of: scenePhase) { _, newPhase in + if newPhase == .active { + Task { + await viewModel.refreshConfig() + } + } + } } } } diff --git a/dns/ViewModel.swift b/dns/ViewModel.swift index 7806081..b07ae51 100644 --- a/dns/ViewModel.swift +++ b/dns/ViewModel.swift @@ -53,30 +53,7 @@ class ViewModel: NSObject, ObservableObject { super.init() Task { - do { - try await manager.loadFromPreferences() - } - catch { - log.error("Error loading preferences: \(error)") - } - - isDnsEnabled = manager.isEnabled - - if let settings = manager.dnsSettings { - for dnsServer in BlocklistOption.allCases { - if settings.servers.contains(dnsServer.ipv4) { - await MainActor.run { - blocklist = dnsServer - } - - break - } - } - } - else { - // Trigger `blocklist.didSet` to store right away, so user has something to select. - blocklist = blocklist - } + await refreshConfig() } Task { @@ -87,6 +64,33 @@ class ViewModel: NSObject, ObservableObject { // MARK: Public Methods + func refreshConfig() async { + do { + try await manager.loadFromPreferences() + } + catch { + log.error("Error loading preferences: \(error)") + } + + isDnsEnabled = manager.isEnabled + + if let settings = manager.dnsSettings { + for dnsServer in BlocklistOption.allCases { + if settings.servers.contains(dnsServer.ipv4) { + await MainActor.run { + blocklist = dnsServer + } + + break + } + } + } + else { + // Trigger `blocklist.didSet` to store right away, so user has something to select. + blocklist = blocklist + } + } + func fetchServerStatus() async { do { let (data, _) = try await URLSession.shared.data(for: .init(url: .init(string: "https://status.sr2.uk/index.json")!))