fix binding

This commit is contained in:
anlicheng 2026-03-25 16:09:06 +08:00
parent 2c440a32c7
commit dee3e26c33
3 changed files with 23 additions and 2 deletions

View File

@ -18,8 +18,8 @@ class VPNManager {
private var manager: NETunnelProviderManager? private var manager: NETunnelProviderManager?
private var statusObserver: NSObjectProtocol? private var statusObserver: NSObjectProtocol?
var isConnected: Bool = false
var vpnStatus: VPNStatus = .disconnected var vpnStatus: VPNStatus = .disconnected
var isConnected: Bool = false
var vpnStatusStream: AsyncStream<VPNStatus> var vpnStatusStream: AsyncStream<VPNStatus>
private var vpnStatusCont: AsyncStream<VPNStatus>.Continuation private var vpnStatusCont: AsyncStream<VPNStatus>.Continuation

View File

@ -90,6 +90,11 @@ class AppContext {
throw AppContextError.nullNetworkSession throw AppContextError.nullNetworkSession
} }
//
guard !vpnManager.isConnected else {
return
}
let context = try await SDLAPIClient.connectNetwork(accesToken: session.accessToken) let context = try await SDLAPIClient.connectNetwork(accesToken: session.accessToken)
if let options = SystemConfig.getOptions( if let options = SystemConfig.getOptions(
networkId: UInt32(session.networkId), networkId: UInt32(session.networkId),

View File

@ -105,6 +105,21 @@ struct NetworkStatusBar: View {
@State private var vpnManger = VPNManager.shared @State private var vpnManger = VPNManager.shared
var body: some View { var body: some View {
let isOnBinding = Binding(
get: { vpnManger.isConnected },
set: { newValue in
if newValue {
Task {
try? await self.appContext.connectNetwork()
}
} else {
Task {
try? await self.appContext.disconnectNetwork()
}
}
}
)
HStack(spacing: 12) { HStack(spacing: 12) {
// //
HStack(spacing: 20) { HStack(spacing: 20) {
@ -133,12 +148,13 @@ struct NetworkStatusBar: View {
// Switch // Switch
// 使 Binding / // 使 Binding /
Toggle("", isOn: $vpnManger.isConnected) Toggle("", isOn: isOnBinding)
.toggleStyle(.switch) .toggleStyle(.switch)
.controlSize(.small) // macOS 使 small .controlSize(.small) // macOS 使 small
} }
.padding(.vertical, 5) .padding(.vertical, 5)
} }
} }
struct NetworkConnectedView: View { struct NetworkConnectedView: View {