Require cancel listener availability before entering recording state

This commit is contained in:
Thales Maciel 2026-02-26 16:40:14 -03:00
parent aa77dbc395
commit 2b494851a6
2 changed files with 46 additions and 3 deletions

View file

@ -77,11 +77,13 @@ class Daemon:
self.vocabulary = VocabularyEngine(cfg.vocabulary)
self._stt_hint_kwargs_cache: dict[str, Any] | None = None
def _arm_cancel_listener(self):
def _arm_cancel_listener(self) -> bool:
try:
self.desktop.start_cancel_listener(lambda: self.cancel_recording())
return True
except Exception as exc:
logging.error("failed to start cancel listener: %s", exc)
return False
def _disarm_cancel_listener(self):
try:
@ -130,12 +132,23 @@ class Daemon:
except Exception as exc:
logging.error("record start failed: %s", exc)
return
if not self._arm_cancel_listener():
try:
stream.stop()
except Exception:
pass
try:
stream.close()
except Exception:
pass
logging.error("recording start aborted because cancel listener is unavailable")
return
self.stream = stream
self.record = record
prev = self.state
self.state = State.RECORDING
logging.debug("state: %s -> %s", prev, self.state)
self._arm_cancel_listener()
logging.info("recording started")
if self.timer:
self.timer.cancel()