修改逻辑

This commit is contained in:
anlicheng 2026-03-03 14:46:14 +08:00
parent 38ed560122
commit 5e40f5b7a7
7 changed files with 50 additions and 137 deletions

View File

@ -92,7 +92,6 @@ class VPNManager: ObservableObject {
return manager
}
deinit {
NotificationCenter.default.removeObserver(self)
}

View File

@ -1,89 +0,0 @@
//
// AbortView.swift
// sdlan
//
// Created by on 2024/6/5.
//
import Foundation
import SwiftUI
struct AbortView: View {
struct AlertShow: Identifiable {
enum ShowContent {
case error(String)
case upgrade(String, String)
}
var id: String
var content: ShowContent
}
@State private var alertShow: AlertShow?
var body: some View {
VStack {
Image("logo")
Text("sdlan")
Text("Version1.1")
Button {
// Task {
// guard let response = try? await SDLAPI.checkVersion(clientId: "test", version: 1, channel: "macos") else {
// DispatchQueue.main.async {
// self.alertShow = AlertShow(id: "network_error", content: .error("Network Error"))
// }
// return
// }
//
// if let result = response.result {
// if result.upgrade_type == 0 {
// DispatchQueue.main.async {
// self.alertShow = AlertShow(id: "upgrade_0", content: .upgrade(result.upgrade_prompt, ""))
// }
// } else if result.upgrade_type == 1 {
// DispatchQueue.main.async {
// self.alertShow = AlertShow(id: "upgrade_1", content: .upgrade(result.upgrade_prompt, result.upgrade_address))
// }
// } else if result.upgrade_type == 2 {
// DispatchQueue.main.async {
// self.alertShow = AlertShow(id: "upgrade_1", content: .upgrade(result.upgrade_prompt, result.upgrade_address))
// }
// }
// } else if let error = response.error {
// DispatchQueue.main.async {
// self.alertShow = AlertShow(id: "response_error", content: .error(error.message))
// }
// }
// }
} label: {
Text("版本检测")
.font(.system(size: 16, weight: .regular))
.foregroundColor(.white)
.cornerRadius(5.0)
}
.frame(width: 138, height: 33)
.buttonStyle(PlainButtonStyle())
.background(Color(red: 74 / 255, green: 207 / 255, blue: 154 / 255))
.cornerRadius(5.0)
}
.alert(item: $alertShow) { show in
switch show.content {
case .error(let errorMessage):
Alert(title: Text("错误提示"), message: Text(errorMessage))
case .upgrade(let prompt, let address):
Alert(title: Text("版本升级"), message: Text(prompt), primaryButton: .default(Text("升级版本"), action: {
if let url = URL(string: address) {
// schema: "macappstore://apps.apple.com/app/idYOUR_APP_ID"
NSWorkspace.shared.open(url)
}
}), secondaryButton: .cancel())
}
}
}
}

View File

@ -93,28 +93,6 @@ struct NodeDetail: Codable {
@Observable
class NetworkModel {
//
enum ConnectState {
case waitAuth
case connected
case disconnected
}
//
var connectState: ConnectState = .disconnected
//
var isOn: Bool = false {
didSet {
if isOn {
self.connectState = .connected
} else {
self.connectState = .disconnected
}
}
}
//
var selectedNode: Node?
var networkContext: NetworkContext = .default()
@ -138,8 +116,6 @@ class NetworkModel {
]
self.networkContext = try await SDLAPIClient.doPost(path: "/connect", params: params, as: NetworkContext.self)
self.connectState = .connected
self.isOn = true
}
}

View File

@ -7,11 +7,21 @@
import SwiftUI
//
enum ConnectState {
case waitAuth
case connected
case disconnected
}
struct NetworkView: View {
@Environment(UserContext.self) var userContext: UserContext
@Environment(\.openWindow) private var openWindow
@State private var networkModel = NetworkModel()
@State private var showMode: ShowMode = .resource
//
@State private var connectState: ConnectState = .disconnected
@State private var isOn: Bool = false
//
enum ShowMode {
@ -31,7 +41,7 @@ struct NetworkView: View {
}
HStack {
Toggle("", isOn: $networkModel.isOn)
Toggle("", isOn: $isOn)
.toggleStyle(SwitchToggleStyle(tint: .green))
.disabled(true)
@ -42,7 +52,7 @@ struct NetworkView: View {
}
.frame(width: 320)
if self.networkModel.connectState == .connected {
if self.connectState == .connected {
//
HStack {
Button {
@ -62,7 +72,7 @@ struct NetworkView: View {
}
Group {
switch self.networkModel.connectState {
switch self.connectState {
case .waitAuth:
NetworkWaitAuthView(networkModel: self.networkModel)
case .connected:
@ -83,8 +93,18 @@ struct NetworkView: View {
}
.padding(.top, 10)
.padding(.leading, 10)
.onChange(of: VPNManager.shared.vpnStatus) { _, newState in
switch newState {
case .connected:
self.connectState = .connected
self.isOn = true
case .disconnected:
self.connectState = .disconnected
self.isOn = false
}
}
.toolbar {
if self.networkModel.connectState == .connected {
if self.connectState == .connected {
ToolbarItem(placement: .primaryAction) {
Button {
openWindow(id: "settings")

View File

@ -8,16 +8,14 @@
import SwiftUI
struct RootView: View {
@State private var userContext = UserContext()
@Environment(UserContext.self) var userContext
var body: some View {
Group {
if userContext.isLogined {
NetworkView()
.environment(userContext)
} else {
LoginView()
.environment(userContext)
}
}
}

View File

@ -9,6 +9,7 @@ import SwiftUI
struct SettingsAccountView: View {
@State var state: SettingsState = SettingsState()
@Environment(UserContext.self) var userContext: UserContext
var body: some View {
@ -16,11 +17,14 @@ struct SettingsAccountView: View {
VStack(alignment: .leading) {
Text("账户")
AccountCreditView()
AccountCreditView()
TokenCreditView()
AccountCreditView()
TokenCreditView()
if let loginCredit = userContext.loginCredit {
switch loginCredit {
case .token(let token):
TokenCreditView(token: token)
case .accountAndPasword(let account, let password):
AccountCreditView(username: account)
}
}
Text("网络")
@ -68,13 +72,15 @@ extension SettingsAccountView {
//
struct AccountCreditView: View {
let username: String
var body: some View {
HStack {
Image("logo")
.resizable()
.frame(width: 20, height: 20)
Text("13012345678")
Text(username)
Spacer()
@ -85,7 +91,9 @@ extension SettingsAccountView {
}
Button {
Task {
try await VPNManager.shared.disableVpn()
}
} label: {
Text("退出登陆")
}
@ -97,6 +105,7 @@ extension SettingsAccountView {
// Token
struct TokenCreditView: View {
let token: String
var body: some View {
HStack {
@ -104,12 +113,14 @@ extension SettingsAccountView {
.resizable()
.frame(width: 20, height: 20)
Text("key_001")
Text(token)
Spacer()
Button {
Task {
try await VPNManager.shared.disableVpn()
}
} label: {
Text("退出登陆")
}
@ -119,13 +130,8 @@ extension SettingsAccountView {
}
}
}
#Preview {
SettingsAccountView()
}

View File

@ -37,6 +37,7 @@ struct punchnetApp: App {
private var noticeServer: UDPNoticeCenterServer
@State private var appContext: AppContext
@State private var userContext = UserContext()
init() {
self.noticeServer = UDPNoticeCenterServer()
@ -70,6 +71,7 @@ struct punchnetApp: App {
//.toolbar(.hidden)
.navigationTitle("")
.environment(self.appContext)
.environment(self.userContext)
}
.commands {
CommandGroup(replacing: .appInfo) {
@ -85,6 +87,7 @@ struct punchnetApp: App {
Window("设置", id: "settings") {
SettingsView()
.environment(self.userContext)
}
.defaultSize(width: 800, height: 500)