fix: trim overlay transcript to post-trigger
This commit is contained in:
@@ -144,10 +144,11 @@ actor VoiceWakeRuntime {
|
|||||||
if !transcript.isEmpty {
|
if !transcript.isEmpty {
|
||||||
self.lastHeard = now
|
self.lastHeard = now
|
||||||
if self.isCapturing {
|
if self.isCapturing {
|
||||||
self.capturedTranscript = transcript
|
self.capturedTranscript = Self.trimmedAfterTrigger(transcript, triggers: config.triggers)
|
||||||
self.updateHeardBeyondTrigger(with: transcript)
|
self.updateHeardBeyondTrigger(with: transcript)
|
||||||
|
let snapshot = self.capturedTranscript
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
VoiceWakeOverlayController.shared.showPartial(transcript: transcript)
|
VoiceWakeOverlayController.shared.showPartial(transcript: snapshot)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -175,13 +176,14 @@ actor VoiceWakeRuntime {
|
|||||||
|
|
||||||
private func beginCapture(transcript: String, config: RuntimeConfig) async {
|
private func beginCapture(transcript: String, config: RuntimeConfig) async {
|
||||||
self.isCapturing = true
|
self.isCapturing = true
|
||||||
self.capturedTranscript = transcript
|
self.capturedTranscript = Self.trimmedAfterTrigger(transcript, triggers: config.triggers)
|
||||||
self.captureStartedAt = Date()
|
self.captureStartedAt = Date()
|
||||||
self.cooldownUntil = nil
|
self.cooldownUntil = nil
|
||||||
self.heardBeyondTrigger = self.textHasBeyondTriggerContent(transcript)
|
self.heardBeyondTrigger = self.textHasBeyondTriggerContent(transcript)
|
||||||
|
|
||||||
|
let snapshot = self.capturedTranscript
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
VoiceWakeOverlayController.shared.showPartial(transcript: transcript)
|
VoiceWakeOverlayController.shared.showPartial(transcript: snapshot)
|
||||||
}
|
}
|
||||||
|
|
||||||
await MainActor.run { AppStateStore.shared.triggerVoiceEars(ttl: nil) }
|
await MainActor.run { AppStateStore.shared.triggerVoiceEars(ttl: nil) }
|
||||||
@@ -274,6 +276,18 @@ actor VoiceWakeRuntime {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static func trimmedAfterTrigger(_ text: String, triggers: [String]) -> String {
|
||||||
|
let lower = text.lowercased()
|
||||||
|
for trigger in triggers {
|
||||||
|
let token = trigger.lowercased().trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
guard !token.isEmpty, let range = lower.range(of: token) else { continue }
|
||||||
|
let after = range.upperBound
|
||||||
|
let trimmed = text[after...].trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
|
return String(trimmed)
|
||||||
|
}
|
||||||
|
return text
|
||||||
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
static func _testMatches(text: String, triggers: [String]) -> Bool {
|
static func _testMatches(text: String, triggers: [String]) -> Bool {
|
||||||
self.matches(text: text, triggers: triggers)
|
self.matches(text: text, triggers: triggers)
|
||||||
|
|||||||
Reference in New Issue
Block a user