37 lines
1.2 KiB
Python
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),
|
|
} |