From 2b33d09134579f4153f297969e535389ee0d2819 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Sat, 2 Nov 2024 16:30:41 +0800 Subject: [PATCH] Add support for openURL event --- .../Views/Dashboard/ExtensionStatusView.swift | 6 +++++- Library/Network/CommandClient.swift | 13 ++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ApplicationLibrary/Views/Dashboard/ExtensionStatusView.swift b/ApplicationLibrary/Views/Dashboard/ExtensionStatusView.swift index a525b91..e1719ed 100644 --- a/ApplicationLibrary/Views/Dashboard/ExtensionStatusView.swift +++ b/ApplicationLibrary/Views/Dashboard/ExtensionStatusView.swift @@ -4,7 +4,9 @@ import SwiftUI public struct ExtensionStatusView: View { @Environment(\.scenePhase) private var scenePhase + @Environment(\.openURL) private var openURL @StateObject private var commandClient = CommandClient(.status) + @State private var columnCount: Int = 4 @State private var alert: Alert? @@ -89,7 +91,9 @@ public struct ExtensionStatusView: View { .padding([.top, .leading, .trailing]) } .onAppear { - commandClient.connect() + commandClient.connect { urlString in + openURL(URL(string: urlString)!) + } } .onDisappear { commandClient.disconnect() diff --git a/Library/Network/CommandClient.swift b/Library/Network/CommandClient.swift index c9058d0..d7d358f 100644 --- a/Library/Network/CommandClient.swift +++ b/Library/Network/CommandClient.swift @@ -14,6 +14,7 @@ public class CommandClient: ObservableObject { private let logMaxLines: Int private var commandClient: LibboxCommandClient? private var connectTask: Task? + private var openURLFunc: ((String) -> Void)? @Published public var isConnected: Bool @Published public var status: LibboxStatusMessage? @@ -30,13 +31,15 @@ public class CommandClient: ObservableObject { public init(_ connectionType: ConnectionType, logMaxLines: Int = 300) { self.connectionType = connectionType self.logMaxLines = logMaxLines + openURLFunc = nil logList = [] clashModeList = [] clashMode = "" isConnected = false } - public func connect() { + public func connect(_ openURLFunc: ((String) -> Void)? = nil) { + self.openURLFunc = openURLFunc if isConnected { return } @@ -49,6 +52,7 @@ public class CommandClient: ObservableObject { } public func disconnect() { + openURLFunc = nil if let connectTask { connectTask.cancel() self.connectTask = nil @@ -223,6 +227,13 @@ public class CommandClient: ObservableObject { commandClient.connections = connections } } + + func openURL(_ url: String?) { + guard let url else { + return + } + commandClient.openURLFunc?(url) + } } }