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 }
|
enum Source: String { case wakeWord, pushToTalk }
|
||||||
|
|
||||||
@Published private(set) var model = Model()
|
@Published private(set) var model = Model()
|
||||||
|
var isVisible: Bool { self.model.isVisible }
|
||||||
|
|
||||||
struct Model {
|
struct Model {
|
||||||
var text: String = ""
|
var text: String = ""
|
||||||
@@ -51,6 +52,10 @@ final class VoiceWakeOverlayController: ObservableObject {
|
|||||||
forwardEnabled: Bool = false,
|
forwardEnabled: Bool = false,
|
||||||
isFinal: Bool = false) -> UUID
|
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 token = UUID()
|
||||||
let message = """
|
let message = """
|
||||||
overlay session_start source=\(source.rawValue) \
|
overlay session_start source=\(source.rawValue) \
|
||||||
|
|||||||
@@ -359,7 +359,7 @@ actor VoiceWakeRuntime {
|
|||||||
self.overlayToken = nil
|
self.overlayToken = nil
|
||||||
|
|
||||||
self.cooldownUntil = Date().addingTimeInterval(self.debounceAfterSend)
|
self.cooldownUntil = Date().addingTimeInterval(self.debounceAfterSend)
|
||||||
self.restartRecognizer()
|
self.scheduleRestartRecognizer()
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Audio level handling
|
// 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() {
|
func applyPushToTalkCooldown() {
|
||||||
self.cooldownUntil = Date().addingTimeInterval(self.debounceAfterSend)
|
self.cooldownUntil = Date().addingTimeInterval(self.debounceAfterSend)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user