Overlay: block new sessions while sending; delay runtime restart
This commit is contained in:
@@ -13,6 +13,7 @@ final class VoiceWakeOverlayController: ObservableObject {
|
||||
enum Source: String { case wakeWord, pushToTalk }
|
||||
|
||||
@Published private(set) var model = Model()
|
||||
var isVisible: Bool { self.model.isVisible }
|
||||
|
||||
struct Model {
|
||||
var text: String = ""
|
||||
@@ -51,6 +52,10 @@ final class VoiceWakeOverlayController: ObservableObject {
|
||||
forwardEnabled: Bool = false,
|
||||
isFinal: Bool = false) -> UUID
|
||||
{
|
||||
if self.model.isSending {
|
||||
self.logger.log(level: .info, "overlay drop session_start while sending")
|
||||
return self.activeToken ?? UUID()
|
||||
}
|
||||
let token = UUID()
|
||||
let message = """
|
||||
overlay session_start source=\(source.rawValue) \
|
||||
|
||||
@@ -359,7 +359,7 @@ actor VoiceWakeRuntime {
|
||||
self.overlayToken = nil
|
||||
|
||||
self.cooldownUntil = Date().addingTimeInterval(self.debounceAfterSend)
|
||||
self.restartRecognizer()
|
||||
self.scheduleRestartRecognizer()
|
||||
}
|
||||
|
||||
// MARK: - Audio level handling
|
||||
@@ -406,6 +406,18 @@ actor VoiceWakeRuntime {
|
||||
}
|
||||
}
|
||||
|
||||
private func scheduleRestartRecognizer(delay: TimeInterval = 0.7) {
|
||||
Task { [weak self] in
|
||||
let nanos = UInt64(max(0, delay) * 1_000_000_000)
|
||||
try? await Task.sleep(nanoseconds: nanos)
|
||||
guard let self else { return }
|
||||
if self.isCapturing { return }
|
||||
let overlayVisible = await MainActor.run { VoiceWakeOverlayController.shared.isVisible }
|
||||
if overlayVisible { return }
|
||||
self.restartRecognizer()
|
||||
}
|
||||
}
|
||||
|
||||
func applyPushToTalkCooldown() {
|
||||
self.cooldownUntil = Date().addingTimeInterval(self.debounceAfterSend)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user