whisper-dictation/whisper_app/app.py

45 lines
1.4 KiB
Python

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