fix: harden startup proxy and coordinate handling

This commit is contained in:
xweiba
2026-08-06 12:17:23 +08:00
parent 881270a21a
commit 0e8e83fd33
26 changed files with 708 additions and 266 deletions
+22 -4
View File
@@ -10,8 +10,8 @@ final class NetworkMonitor: ObservableObject {
@Published private(set) var isWiFiEnabled = true
@Published private(set) var currentSSID: String?
/// WiFi SSID 使
var onWiFiChanged: (() -> Void)?
/// WiFi SSID
private var wifiChangeHandlers: [UUID: @MainActor () -> Void] = [:]
private let monitor = NWPathMonitor()
private var ssidTimer: Timer?
@@ -29,7 +29,7 @@ final class NetworkMonitor: ObservableObject {
self.isSatisfied = satisfied
self.isWiFiEnabled = wifi
if reconnected {
self.onWiFiChanged?()
self.notifyWiFiChanged()
}
}
}
@@ -39,6 +39,24 @@ final class NetworkMonitor: ObservableObject {
var isAirplaneMode: Bool { !isSatisfied }
/// Registers a Wi-Fi-change observer and returns a token that must be removed.
@discardableResult
func observeWiFiChanges(_ handler: @escaping @MainActor () -> Void) -> UUID {
let token = UUID()
wifiChangeHandlers[token] = handler
return token
}
func removeWiFiChangeObserver(_ token: UUID) {
wifiChangeHandlers.removeValue(forKey: token)
}
private func notifyWiFiChanged() {
for handler in wifiChangeHandlers.values {
handler()
}
}
private func startSSIDPolling() {
ssidTimer = Timer.scheduledTimer(withTimeInterval: 3.0, repeats: true) { [weak self] _ in
Task { @MainActor in
@@ -46,7 +64,7 @@ final class NetworkMonitor: ObservableObject {
let ssid = Self.fetchSSID()
if ssid != self.currentSSID, ssid != nil {
self.currentSSID = ssid
self.onWiFiChanged?()
self.notifyWiFiChanged()
}
}
}