fix: sync gateway mode via gateway config
This commit is contained in:
@@ -401,11 +401,9 @@ final class AppState {
|
|||||||
private func syncGatewayConfigIfNeeded() {
|
private func syncGatewayConfigIfNeeded() {
|
||||||
guard !self.isPreview, !self.isInitializing else { return }
|
guard !self.isPreview, !self.isInitializing else { return }
|
||||||
|
|
||||||
var root = ClawdbotConfigFile.loadDict()
|
let connectionMode = self.connectionMode
|
||||||
var gateway = root["gateway"] as? [String: Any] ?? [:]
|
let remoteTarget = self.remoteTarget
|
||||||
var changed = false
|
let desiredMode: String? = switch connectionMode {
|
||||||
|
|
||||||
let desiredMode: String? = switch self.connectionMode {
|
|
||||||
case .local:
|
case .local:
|
||||||
"local"
|
"local"
|
||||||
case .remote:
|
case .remote:
|
||||||
@@ -413,37 +411,44 @@ final class AppState {
|
|||||||
case .unconfigured:
|
case .unconfigured:
|
||||||
nil
|
nil
|
||||||
}
|
}
|
||||||
|
let remoteHost = connectionMode == .remote
|
||||||
|
? CommandResolver.parseSSHTarget(remoteTarget)?.host
|
||||||
|
: nil
|
||||||
|
|
||||||
let currentMode = (gateway["mode"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines)
|
Task { @MainActor in
|
||||||
if let desiredMode {
|
var root = await ConfigStore.load()
|
||||||
if currentMode != desiredMode {
|
var gateway = root["gateway"] as? [String: Any] ?? [:]
|
||||||
gateway["mode"] = desiredMode
|
var changed = false
|
||||||
|
|
||||||
|
let currentMode = (gateway["mode"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
if let desiredMode {
|
||||||
|
if currentMode != desiredMode {
|
||||||
|
gateway["mode"] = desiredMode
|
||||||
|
changed = true
|
||||||
|
}
|
||||||
|
} else if currentMode != nil {
|
||||||
|
gateway.removeValue(forKey: "mode")
|
||||||
changed = true
|
changed = true
|
||||||
}
|
}
|
||||||
} else if currentMode != nil {
|
|
||||||
gateway.removeValue(forKey: "mode")
|
|
||||||
changed = true
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.connectionMode == .remote,
|
if connectionMode == .remote, let host = remoteHost {
|
||||||
let host = CommandResolver.parseSSHTarget(self.remoteTarget)?.host
|
var remote = gateway["remote"] as? [String: Any] ?? [:]
|
||||||
{
|
let existingUrl = (remote["url"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
||||||
var remote = gateway["remote"] as? [String: Any] ?? [:]
|
let parsedExisting = existingUrl.isEmpty ? nil : URL(string: existingUrl)
|
||||||
let existingUrl = (remote["url"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
|
let scheme = parsedExisting?.scheme?.isEmpty == false ? parsedExisting?.scheme : "ws"
|
||||||
let parsedExisting = existingUrl.isEmpty ? nil : URL(string: existingUrl)
|
let port = parsedExisting?.port ?? 18789
|
||||||
let scheme = parsedExisting?.scheme?.isEmpty == false ? parsedExisting?.scheme : "ws"
|
let desiredUrl = "\(scheme ?? "ws")://\(host):\(port)"
|
||||||
let port = parsedExisting?.port ?? 18789
|
if existingUrl != desiredUrl {
|
||||||
let desiredUrl = "\(scheme ?? "ws")://\(host):\(port)"
|
remote["url"] = desiredUrl
|
||||||
if existingUrl != desiredUrl {
|
gateway["remote"] = remote
|
||||||
remote["url"] = desiredUrl
|
changed = true
|
||||||
gateway["remote"] = remote
|
}
|
||||||
changed = true
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
guard changed else { return }
|
guard changed else { return }
|
||||||
root["gateway"] = gateway
|
root["gateway"] = gateway
|
||||||
ClawdbotConfigFile.saveDict(root)
|
try? await ConfigStore.save(root)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func triggerVoiceEars(ttl: TimeInterval? = 5) {
|
func triggerVoiceEars(ttl: TimeInterval? = 5) {
|
||||||
|
|||||||
Reference in New Issue
Block a user