修改逻辑
This commit is contained in:
parent
38ed560122
commit
5e40f5b7a7
@ -92,7 +92,6 @@ class VPNManager: ObservableObject {
|
|||||||
return manager
|
return manager
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
NotificationCenter.default.removeObserver(self)
|
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
|
@Observable
|
||||||
class NetworkModel {
|
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 selectedNode: Node?
|
||||||
var networkContext: NetworkContext = .default()
|
var networkContext: NetworkContext = .default()
|
||||||
@ -138,8 +116,6 @@ class NetworkModel {
|
|||||||
]
|
]
|
||||||
|
|
||||||
self.networkContext = try await SDLAPIClient.doPost(path: "/connect", params: params, as: NetworkContext.self)
|
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
|
import SwiftUI
|
||||||
|
|
||||||
|
// 连接状态
|
||||||
|
enum ConnectState {
|
||||||
|
case waitAuth
|
||||||
|
case connected
|
||||||
|
case disconnected
|
||||||
|
}
|
||||||
|
|
||||||
struct NetworkView: View {
|
struct NetworkView: View {
|
||||||
@Environment(UserContext.self) var userContext: UserContext
|
@Environment(UserContext.self) var userContext: UserContext
|
||||||
@Environment(\.openWindow) private var openWindow
|
@Environment(\.openWindow) private var openWindow
|
||||||
@State private var networkModel = NetworkModel()
|
@State private var networkModel = NetworkModel()
|
||||||
@State private var showMode: ShowMode = .resource
|
@State private var showMode: ShowMode = .resource
|
||||||
|
// 状态管理
|
||||||
|
@State private var connectState: ConnectState = .disconnected
|
||||||
|
@State private var isOn: Bool = false
|
||||||
|
|
||||||
// 展示状态
|
// 展示状态
|
||||||
enum ShowMode {
|
enum ShowMode {
|
||||||
@ -31,7 +41,7 @@ struct NetworkView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
HStack {
|
HStack {
|
||||||
Toggle("", isOn: $networkModel.isOn)
|
Toggle("", isOn: $isOn)
|
||||||
.toggleStyle(SwitchToggleStyle(tint: .green))
|
.toggleStyle(SwitchToggleStyle(tint: .green))
|
||||||
.disabled(true)
|
.disabled(true)
|
||||||
|
|
||||||
@ -42,7 +52,7 @@ struct NetworkView: View {
|
|||||||
}
|
}
|
||||||
.frame(width: 320)
|
.frame(width: 320)
|
||||||
|
|
||||||
if self.networkModel.connectState == .connected {
|
if self.connectState == .connected {
|
||||||
// 显示设备和资源选项
|
// 显示设备和资源选项
|
||||||
HStack {
|
HStack {
|
||||||
Button {
|
Button {
|
||||||
@ -62,7 +72,7 @@ struct NetworkView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Group {
|
Group {
|
||||||
switch self.networkModel.connectState {
|
switch self.connectState {
|
||||||
case .waitAuth:
|
case .waitAuth:
|
||||||
NetworkWaitAuthView(networkModel: self.networkModel)
|
NetworkWaitAuthView(networkModel: self.networkModel)
|
||||||
case .connected:
|
case .connected:
|
||||||
@ -83,8 +93,18 @@ struct NetworkView: View {
|
|||||||
}
|
}
|
||||||
.padding(.top, 10)
|
.padding(.top, 10)
|
||||||
.padding(.leading, 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 {
|
.toolbar {
|
||||||
if self.networkModel.connectState == .connected {
|
if self.connectState == .connected {
|
||||||
ToolbarItem(placement: .primaryAction) {
|
ToolbarItem(placement: .primaryAction) {
|
||||||
Button {
|
Button {
|
||||||
openWindow(id: "settings")
|
openWindow(id: "settings")
|
||||||
|
|||||||
@ -8,16 +8,14 @@
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct RootView: View {
|
struct RootView: View {
|
||||||
@State private var userContext = UserContext()
|
@Environment(UserContext.self) var userContext
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
Group {
|
Group {
|
||||||
if userContext.isLogined {
|
if userContext.isLogined {
|
||||||
NetworkView()
|
NetworkView()
|
||||||
.environment(userContext)
|
|
||||||
} else {
|
} else {
|
||||||
LoginView()
|
LoginView()
|
||||||
.environment(userContext)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import SwiftUI
|
|||||||
|
|
||||||
struct SettingsAccountView: View {
|
struct SettingsAccountView: View {
|
||||||
@State var state: SettingsState = SettingsState()
|
@State var state: SettingsState = SettingsState()
|
||||||
|
@Environment(UserContext.self) var userContext: UserContext
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
|
|
||||||
@ -16,11 +17,14 @@ struct SettingsAccountView: View {
|
|||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
Text("账户")
|
Text("账户")
|
||||||
|
|
||||||
AccountCreditView()
|
if let loginCredit = userContext.loginCredit {
|
||||||
AccountCreditView()
|
switch loginCredit {
|
||||||
TokenCreditView()
|
case .token(let token):
|
||||||
AccountCreditView()
|
TokenCreditView(token: token)
|
||||||
TokenCreditView()
|
case .accountAndPasword(let account, let password):
|
||||||
|
AccountCreditView(username: account)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Text("网络")
|
Text("网络")
|
||||||
|
|
||||||
@ -68,13 +72,15 @@ extension SettingsAccountView {
|
|||||||
|
|
||||||
// 基于账号密码的登陆
|
// 基于账号密码的登陆
|
||||||
struct AccountCreditView: View {
|
struct AccountCreditView: View {
|
||||||
|
let username: String
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
HStack {
|
HStack {
|
||||||
Image("logo")
|
Image("logo")
|
||||||
.resizable()
|
.resizable()
|
||||||
.frame(width: 20, height: 20)
|
.frame(width: 20, height: 20)
|
||||||
|
|
||||||
Text("13012345678")
|
Text(username)
|
||||||
|
|
||||||
Spacer()
|
Spacer()
|
||||||
|
|
||||||
@ -85,7 +91,9 @@ extension SettingsAccountView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
|
Task {
|
||||||
|
try await VPNManager.shared.disableVpn()
|
||||||
|
}
|
||||||
} label: {
|
} label: {
|
||||||
Text("退出登陆")
|
Text("退出登陆")
|
||||||
}
|
}
|
||||||
@ -97,6 +105,7 @@ extension SettingsAccountView {
|
|||||||
|
|
||||||
// 基于Token的登陆
|
// 基于Token的登陆
|
||||||
struct TokenCreditView: View {
|
struct TokenCreditView: View {
|
||||||
|
let token: String
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
HStack {
|
HStack {
|
||||||
@ -104,12 +113,14 @@ extension SettingsAccountView {
|
|||||||
.resizable()
|
.resizable()
|
||||||
.frame(width: 20, height: 20)
|
.frame(width: 20, height: 20)
|
||||||
|
|
||||||
Text("key_001")
|
Text(token)
|
||||||
|
|
||||||
Spacer()
|
Spacer()
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
|
Task {
|
||||||
|
try await VPNManager.shared.disableVpn()
|
||||||
|
}
|
||||||
} label: {
|
} label: {
|
||||||
Text("退出登陆")
|
Text("退出登陆")
|
||||||
}
|
}
|
||||||
@ -119,13 +130,8 @@ extension SettingsAccountView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#Preview {
|
#Preview {
|
||||||
SettingsAccountView()
|
SettingsAccountView()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,6 +37,7 @@ struct punchnetApp: App {
|
|||||||
|
|
||||||
private var noticeServer: UDPNoticeCenterServer
|
private var noticeServer: UDPNoticeCenterServer
|
||||||
@State private var appContext: AppContext
|
@State private var appContext: AppContext
|
||||||
|
@State private var userContext = UserContext()
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
self.noticeServer = UDPNoticeCenterServer()
|
self.noticeServer = UDPNoticeCenterServer()
|
||||||
@ -70,6 +71,7 @@ struct punchnetApp: App {
|
|||||||
//.toolbar(.hidden)
|
//.toolbar(.hidden)
|
||||||
.navigationTitle("")
|
.navigationTitle("")
|
||||||
.environment(self.appContext)
|
.environment(self.appContext)
|
||||||
|
.environment(self.userContext)
|
||||||
}
|
}
|
||||||
.commands {
|
.commands {
|
||||||
CommandGroup(replacing: .appInfo) {
|
CommandGroup(replacing: .appInfo) {
|
||||||
@ -85,6 +87,7 @@ struct punchnetApp: App {
|
|||||||
|
|
||||||
Window("设置", id: "settings") {
|
Window("设置", id: "settings") {
|
||||||
SettingsView()
|
SettingsView()
|
||||||
|
.environment(self.userContext)
|
||||||
}
|
}
|
||||||
.defaultSize(width: 800, height: 500)
|
.defaultSize(width: 800, height: 500)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user