diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/state.py b/api/state.py new file mode 100644 index 0000000..289466c --- /dev/null +++ b/api/state.py @@ -0,0 +1,36 @@ +import asyncio +from dataclasses import dataclass, field +from enum import Enum +from typing import Callable + + +class Status(str, Enum): + IDLE = "idle" + RECORDING = "recording" + PROCESSING = "processing" + ERROR = "error" + + +@dataclass +class AppState: + status: Status = Status.IDLE + recording_user: str | None = None # which user triggered the current recording + last_error: str | None = None + _listeners: list[Callable] = field(default_factory=list, repr=False) + + def subscribe(self, callback: Callable): + self._listeners.append(callback) + + async def notify(self): + for cb in self._listeners: + if asyncio.iscoroutinefunction(cb): + await cb(self) + else: + cb(self) + + async def set_status(self, status: Status): + self.status = status + await self.notify() + + +state = AppState()