Files
DD3-Lora-Bridge-Raspi-Debugger/src/app_state.py

37 lines
1.2 KiB
Python

from dataclasses import dataclass, field
from threading import Lock
from typing import Dict, List
@dataclass
class AppState:
ap_mode: bool = False
wifi_connected: bool = False
internet_available: bool = False
connecting: bool = False
status_message: str = "Startup"
last_error: str = ""
known_ssids: List[str] = field(default_factory=list)
ap_grace_until: float = 0.0
lock: Lock = field(default_factory=Lock, repr=False)
def update_status(self, message: str, error: str = "") -> None:
with self.lock:
self.status_message = message
self.last_error = error
def set_known_ssids(self, ssids: List[str]) -> None:
with self.lock:
self.known_ssids = ssids
def snapshot(self) -> Dict[str, object]:
with self.lock:
return {
"ap_mode": self.ap_mode,
"wifi_connected": self.wifi_connected,
"internet_available": self.internet_available,
"connecting": self.connecting,
"status_message": self.status_message,
"last_error": self.last_error,
"known_ssids": list(self.known_ssids),
}