Save preferences to JSON file

This commit is contained in:
Michael Hansen
2025-09-15 11:06:09 -05:00
parent ea901a1c14
commit 2c937e3cb3
5 changed files with 58 additions and 4 deletions
+21 -1
View File
@@ -1,6 +1,8 @@
"""Shared models."""
from dataclasses import dataclass
import json
import logging
from dataclasses import asdict, dataclass, field
from pathlib import Path
from queue import Queue
from typing import TYPE_CHECKING, Dict, List, Optional
@@ -11,6 +13,8 @@ if TYPE_CHECKING:
from .mpv_player import MpvMediaPlayer
from .satellite import VoiceSatelliteProtocol
_LOGGER = logging.getLogger(__name__)
@dataclass
class AvailableWakeWord:
@@ -20,6 +24,11 @@ class AvailableWakeWord:
config_path: Path
@dataclass
class Preferences:
active_wake_words: List[str] = field(default_factory=list)
@dataclass
class ServerState:
name: str
@@ -33,5 +42,16 @@ class ServerState:
tts_player: "MpvMediaPlayer"
wakeup_sound: str
timer_finished_sound: str
preferences: Preferences
preferences_path: Path
media_player_entity: "Optional[MediaPlayerEntity]" = None
satellite: "Optional[VoiceSatelliteProtocol]" = None
def save_preferences(self) -> None:
"""Save preferences as JSON."""
_LOGGER.debug("Saving preferences: %s", self.preferences_path)
self.preferences_path.parent.mkdir(parents=True, exist_ok=True)
with open(self.preferences_path, "w", encoding="utf-8") as preferences_file:
json.dump(
asdict(self.preferences), preferences_file, ensure_ascii=False, indent=4
)