52 lines
1.6 KiB
Swift
52 lines
1.6 KiB
Swift
import Foundation
|
|
import SwiftUI
|
|
|
|
public class ExtensionEnvironments: ObservableObject {
|
|
@Published public var logClient = CommandClient(.log)
|
|
@Published public var extensionProfileLoading = true
|
|
@Published public var extensionProfile: ExtensionProfile?
|
|
@Published public var emptyProfiles = false
|
|
|
|
public let profileUpdate = ObjectWillChangePublisher()
|
|
public let selectedProfileUpdate = ObjectWillChangePublisher()
|
|
public let openSettings = ObjectWillChangePublisher()
|
|
public let openProfileGetSuccess = ObjectWillChangePublisher() //用户订阅地址更新
|
|
public let opentixingSubnodes = ObjectWillChangePublisher() //提醒订阅节点弹出续费
|
|
public let updateTixingdingyueEnabled = ObjectWillChangePublisher() //更新提醒boolean 动态
|
|
|
|
public init() {}
|
|
|
|
deinit {
|
|
logClient.disconnect()
|
|
}
|
|
|
|
public func postReload() {
|
|
Task {
|
|
await reload()
|
|
}
|
|
}
|
|
|
|
@MainActor
|
|
public func reload() async {
|
|
if let newProfile = try? await ExtensionProfile.load() {
|
|
if extensionProfile == nil || extensionProfile?.status == .invalid {
|
|
newProfile.register()
|
|
extensionProfile = newProfile
|
|
extensionProfileLoading = false
|
|
}
|
|
} else {
|
|
extensionProfile = nil
|
|
extensionProfileLoading = false
|
|
}
|
|
}
|
|
|
|
public func connectLog() {
|
|
guard let profile = extensionProfile else {
|
|
return
|
|
}
|
|
if profile.status.isConnected, !logClient.isConnected {
|
|
logClient.connect()
|
|
}
|
|
}
|
|
}
|