From e2cbaff5676b4fb099f4122b8260d7ac61f6165f Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Tue, 3 Mar 2026 14:57:38 +0800 Subject: [PATCH] fix ui --- punchnet/Core/VPNManager.swift | 29 +++++++++++------------------ punchnet/punchnetApp.swift | 16 ++-------------- 2 files changed, 13 insertions(+), 32 deletions(-) diff --git a/punchnet/Core/VPNManager.swift b/punchnet/Core/VPNManager.swift index 9c11fcc..5953e21 100644 --- a/punchnet/Core/VPNManager.swift +++ b/punchnet/Core/VPNManager.swift @@ -10,12 +10,11 @@ import NetworkExtension import SwiftUI // vpn管理类 -class VPNManager: ObservableObject { +class VPNManager { static let shared = VPNManager() - @Published var vpnStatus: VPNStatus = .disconnected - @Published var title: String = "启动" - @Published var color: Color = .white + private var observation: NSKeyValueObservation? + var vpnStatus: VPNStatus = .disconnected enum VPNStatus { case connected @@ -46,23 +45,17 @@ class VPNManager: ObservableObject { // 监控系统VPN的状态的变化 private func addVPNStatusObserver(_ manager: NETunnelProviderManager) { - NotificationCenter.default.removeObserver(self) - - NotificationCenter.default.addObserver(forName: .NEVPNStatusDidChange, object: manager.connection, queue: .main) { [unowned self] (notification) -> Void in - // 更新vpn的状态 - switch manager.connection.status { + self.observation = manager.connection.observe(\.status, options: [.initial, .new]) {[weak self] connection, change in + guard let status = change.newValue else { + return + } + switch status { case .invalid, .disconnected, .disconnecting: - self.vpnStatus = .disconnected - self.title = "启动" - self.color = .white + self?.vpnStatus = .disconnected case .connecting, .connected, .reasserting: - self.vpnStatus = .connected - self.title = "停止" - self.color = .red + self?.vpnStatus = .connected @unknown default: - self.vpnStatus = .disconnected - self.title = "启动" - self.color = .red + self?.vpnStatus = .disconnected } } } diff --git a/punchnet/punchnetApp.swift b/punchnet/punchnetApp.swift index f395210..725edd0 100644 --- a/punchnet/punchnetApp.swift +++ b/punchnet/punchnetApp.swift @@ -33,7 +33,6 @@ struct punchnetApp: App { @AppStorage("token") var token: String = "" @AppStorage("network_code") var networkCode: String = "" @AppStorage("hostname") var hostname: String = "" - @ObservedObject var vpnManager = VPNManager.shared private var noticeServer: UDPNoticeCenterServer @State private var appContext: AppContext @@ -96,7 +95,7 @@ struct punchnetApp: App { Button(action: { self.menuClick() }, label: { - Text(vpnManager.title) + Text("启动") }) Divider() @@ -111,18 +110,7 @@ struct punchnetApp: App { } private func menuClick() { - switch self.vpnManager.vpnStatus { - case .disconnected: -// Task { -// let clientId = SystemConfig.getClientId() -// try await vpnManager.enableVpn(options: SystemConfig.getOptions(networkCode: self.networkCode, token: self.token, clientId: clientId, hostname: self.hostname, noticePort: self.noticeServer.port)!) -// } - () - case .connected: - Task { - try await vpnManager.disableVpn() - } - } + } }