修改逻辑
This commit is contained in:
parent
38ed560122
commit
5e40f5b7a7
@ -92,7 +92,6 @@ class VPNManager: ObservableObject {
|
||||
return manager
|
||||
}
|
||||
|
||||
|
||||
deinit {
|
||||
NotificationCenter.default.removeObserver(self)
|
||||
}
|
||||
|
||||
@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user