VoiceWake: add SSH forward target

This commit is contained in:
Peter Steinberger
2025-12-07 01:53:33 +01:00
parent 6355113af9
commit cf0f44823a
5 changed files with 268 additions and 33 deletions

View File

@@ -59,6 +59,22 @@ final class AppState: ObservableObject {
didSet { UserDefaults.standard.set(self.voiceWakeAdditionalLocaleIDs, forKey: voiceWakeAdditionalLocalesKey) }
}
@Published var voiceWakeForwardEnabled: Bool {
didSet { UserDefaults.standard.set(self.voiceWakeForwardEnabled, forKey: voiceWakeForwardEnabledKey) }
}
@Published var voiceWakeForwardTarget: String {
didSet { UserDefaults.standard.set(self.voiceWakeForwardTarget, forKey: voiceWakeForwardTargetKey) }
}
@Published var voiceWakeForwardIdentity: String {
didSet { UserDefaults.standard.set(self.voiceWakeForwardIdentity, forKey: voiceWakeForwardIdentityKey) }
}
@Published var voiceWakeForwardCommand: String {
didSet { UserDefaults.standard.set(self.voiceWakeForwardCommand, forKey: voiceWakeForwardCommandKey) }
}
@Published var isWorking: Bool = false
@Published var earBoostActive: Bool = false
@@ -79,6 +95,13 @@ final class AppState: ObservableObject {
self.voiceWakeLocaleID = UserDefaults.standard.string(forKey: voiceWakeLocaleKey) ?? Locale.current.identifier
self.voiceWakeAdditionalLocaleIDs = UserDefaults.standard
.stringArray(forKey: voiceWakeAdditionalLocalesKey) ?? []
self.voiceWakeForwardEnabled = UserDefaults.standard.bool(forKey: voiceWakeForwardEnabledKey)
let legacyTarget = Self.legacyTargetString()
self.voiceWakeForwardTarget = UserDefaults.standard
.string(forKey: voiceWakeForwardTargetKey) ?? legacyTarget
self.voiceWakeForwardIdentity = UserDefaults.standard.string(forKey: voiceWakeForwardIdentityKey) ?? ""
self.voiceWakeForwardCommand = UserDefaults.standard
.string(forKey: voiceWakeForwardCommandKey) ?? defaultVoiceWakeForwardCommand
}
func triggerVoiceEars(ttl: TimeInterval = 5) {
@@ -110,6 +133,27 @@ enum AppStateStore {
}
}
extension AppState {
var voiceWakeForwardConfig: VoiceWakeForwardConfig {
VoiceWakeForwardConfig(
enabled: self.voiceWakeForwardEnabled,
target: self.voiceWakeForwardTarget,
identityPath: self.voiceWakeForwardIdentity,
commandTemplate: self.voiceWakeForwardCommand,
timeout: defaultVoiceWakeForwardTimeout)
}
private static func legacyTargetString() -> String {
let host = UserDefaults.standard.string(forKey: voiceWakeForwardHostKey) ?? ""
let user = UserDefaults.standard.string(forKey: voiceWakeForwardUserKey) ?? ""
let savedPort = UserDefaults.standard.integer(forKey: voiceWakeForwardPortKey)
let port = savedPort == 0 ? defaultVoiceWakeForwardPort : savedPort
let userPrefix = user.isEmpty ? "" : "\(user)@"
let portSuffix = host.isEmpty ? "" : ":\(port)"
return "\(userPrefix)\(host)\(portSuffix)"
}
}
@MainActor
enum AppActivationPolicy {
static func apply(showDockIcon: Bool) {