import queue import threading from enum import Enum class AppState(Enum): IDLE = "idle" RECORDING = "recording" TRANSCRIBING = "transcribing" # ── Log queue ───────────────────────────────────────────────────────────────── _log_buffer: list[str] = [] _log_queue: queue.Queue | None = None _log_lock = threading.Lock() _MAX_BUFFER = 500 def log(msg: str) -> None: with _log_lock: if _log_queue is not None: _log_queue.put(msg) else: if len(_log_buffer) >= _MAX_BUFFER: _log_buffer.pop(0) _log_buffer.append(msg) def set_log_queue(q: queue.Queue) -> None: global _log_queue with _log_lock: _log_queue = q buffered = list(_log_buffer) _log_buffer.clear() for msg in buffered: q.put_nowait(msg) # ── Global state ────────────────────────────────────────────────────────────── state: AppState = AppState.IDLE audio_chunks: list = [] model = None tray_icon = None overlay_window = None overlay_tk = None hotkey_listener = None audio_manager = None