74 lines
2.2 KiB
Python
74 lines
2.2 KiB
Python
"""Preference management for camera component."""
|
|
from __future__ import annotations
|
|
|
|
from typing import Final
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.typing import UNDEFINED, UndefinedType
|
|
|
|
from .const import DOMAIN, PREF_PRELOAD_STREAM
|
|
|
|
STORAGE_KEY: Final = DOMAIN
|
|
STORAGE_VERSION: Final = 1
|
|
|
|
|
|
class CameraEntityPreferences:
|
|
"""Handle preferences for camera entity."""
|
|
|
|
def __init__(self, prefs: dict[str, bool]) -> None:
|
|
"""Initialize prefs."""
|
|
self._prefs = prefs
|
|
|
|
def as_dict(self) -> dict[str, bool]:
|
|
"""Return dictionary version."""
|
|
return self._prefs
|
|
|
|
@property
|
|
def preload_stream(self) -> bool:
|
|
"""Return if stream is loaded on hass start."""
|
|
return self._prefs.get(PREF_PRELOAD_STREAM, False)
|
|
|
|
|
|
class CameraPreferences:
|
|
"""Handle camera preferences."""
|
|
|
|
def __init__(self, hass: HomeAssistant) -> None:
|
|
"""Initialize camera prefs."""
|
|
self._hass = hass
|
|
self._store = hass.helpers.storage.Store(STORAGE_VERSION, STORAGE_KEY)
|
|
self._prefs: dict[str, dict[str, bool]] | None = None
|
|
|
|
async def async_initialize(self) -> None:
|
|
"""Finish initializing the preferences."""
|
|
prefs = await self._store.async_load()
|
|
|
|
if prefs is None:
|
|
prefs = {}
|
|
|
|
self._prefs = prefs
|
|
|
|
async def async_update(
|
|
self,
|
|
entity_id: str,
|
|
*,
|
|
preload_stream: bool | UndefinedType = UNDEFINED,
|
|
stream_options: dict[str, str] | UndefinedType = UNDEFINED,
|
|
) -> None:
|
|
"""Update camera preferences."""
|
|
# Prefs already initialized.
|
|
assert self._prefs is not None
|
|
if not self._prefs.get(entity_id):
|
|
self._prefs[entity_id] = {}
|
|
|
|
for key, value in ((PREF_PRELOAD_STREAM, preload_stream),):
|
|
if value is not UNDEFINED:
|
|
self._prefs[entity_id][key] = value
|
|
|
|
await self._store.async_save(self._prefs)
|
|
|
|
def get(self, entity_id: str) -> CameraEntityPreferences:
|
|
"""Get preferences for an entity."""
|
|
# Prefs are already initialized.
|
|
assert self._prefs is not None
|
|
return CameraEntityPreferences(self._prefs.get(entity_id, {}))
|