Save Thread dataset store when changing preferred dataset (#91411)
This commit is contained in:
parent
47f5160154
commit
b23cedeae9
2 changed files with 24 additions and 8 deletions
|
@ -82,7 +82,7 @@ class DatasetStore:
|
||||||
"""Initialize the dataset store."""
|
"""Initialize the dataset store."""
|
||||||
self.hass = hass
|
self.hass = hass
|
||||||
self.datasets: dict[str, DatasetEntry] = {}
|
self.datasets: dict[str, DatasetEntry] = {}
|
||||||
self.preferred_dataset: str | None = None
|
self._preferred_dataset: str | None = None
|
||||||
self._store: Store[dict[str, Any]] = Store(
|
self._store: Store[dict[str, Any]] = Store(
|
||||||
hass,
|
hass,
|
||||||
STORAGE_VERSION_MAJOR,
|
STORAGE_VERSION_MAJOR,
|
||||||
|
@ -103,14 +103,14 @@ class DatasetStore:
|
||||||
entry = DatasetEntry(source=source, tlv=tlv)
|
entry = DatasetEntry(source=source, tlv=tlv)
|
||||||
self.datasets[entry.id] = entry
|
self.datasets[entry.id] = entry
|
||||||
# Set to preferred if there is no preferred dataset
|
# Set to preferred if there is no preferred dataset
|
||||||
if self.preferred_dataset is None:
|
if self._preferred_dataset is None:
|
||||||
self.preferred_dataset = entry.id
|
self._preferred_dataset = entry.id
|
||||||
self.async_schedule_save()
|
self.async_schedule_save()
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_delete(self, dataset_id: str) -> None:
|
def async_delete(self, dataset_id: str) -> None:
|
||||||
"""Delete dataset."""
|
"""Delete dataset."""
|
||||||
if self.preferred_dataset == dataset_id:
|
if self._preferred_dataset == dataset_id:
|
||||||
raise DatasetPreferredError("attempt to remove preferred dataset")
|
raise DatasetPreferredError("attempt to remove preferred dataset")
|
||||||
del self.datasets[dataset_id]
|
del self.datasets[dataset_id]
|
||||||
self.async_schedule_save()
|
self.async_schedule_save()
|
||||||
|
@ -120,6 +120,21 @@ class DatasetStore:
|
||||||
"""Get dataset by id."""
|
"""Get dataset by id."""
|
||||||
return self.datasets.get(dataset_id)
|
return self.datasets.get(dataset_id)
|
||||||
|
|
||||||
|
@property
|
||||||
|
@callback
|
||||||
|
def preferred_dataset(self) -> str | None:
|
||||||
|
"""Get the id of the preferred dataset."""
|
||||||
|
return self._preferred_dataset
|
||||||
|
|
||||||
|
@preferred_dataset.setter
|
||||||
|
@callback
|
||||||
|
def preferred_dataset(self, dataset_id: str) -> None:
|
||||||
|
"""Set the preferred dataset."""
|
||||||
|
if dataset_id not in self.datasets:
|
||||||
|
raise KeyError("unknown dataset")
|
||||||
|
self._preferred_dataset = dataset_id
|
||||||
|
self.async_schedule_save()
|
||||||
|
|
||||||
async def async_load(self) -> None:
|
async def async_load(self) -> None:
|
||||||
"""Load the datasets."""
|
"""Load the datasets."""
|
||||||
data = await self._store.async_load()
|
data = await self._store.async_load()
|
||||||
|
@ -139,7 +154,7 @@ class DatasetStore:
|
||||||
preferred_dataset = data["preferred_dataset"]
|
preferred_dataset = data["preferred_dataset"]
|
||||||
|
|
||||||
self.datasets = datasets
|
self.datasets = datasets
|
||||||
self.preferred_dataset = preferred_dataset
|
self._preferred_dataset = preferred_dataset
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_schedule_save(self) -> None:
|
def async_schedule_save(self) -> None:
|
||||||
|
@ -151,7 +166,7 @@ class DatasetStore:
|
||||||
"""Return data of datasets to store in a file."""
|
"""Return data of datasets to store in a file."""
|
||||||
data: dict[str, Any] = {}
|
data: dict[str, Any] = {}
|
||||||
data["datasets"] = [dataset.to_json() for dataset in self.datasets.values()]
|
data["datasets"] = [dataset.to_json() for dataset in self.datasets.values()]
|
||||||
data["preferred_dataset"] = self.preferred_dataset
|
data["preferred_dataset"] = self._preferred_dataset
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -65,13 +65,14 @@ async def ws_set_preferred_dataset(
|
||||||
dataset_id = msg["dataset_id"]
|
dataset_id = msg["dataset_id"]
|
||||||
|
|
||||||
store = await dataset_store.async_get_store(hass)
|
store = await dataset_store.async_get_store(hass)
|
||||||
if not (store.async_get(dataset_id)):
|
try:
|
||||||
|
store.preferred_dataset = dataset_id
|
||||||
|
except KeyError:
|
||||||
connection.send_error(
|
connection.send_error(
|
||||||
msg["id"], websocket_api.const.ERR_NOT_FOUND, "unknown dataset"
|
msg["id"], websocket_api.const.ERR_NOT_FOUND, "unknown dataset"
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
store.preferred_dataset = dataset_id
|
|
||||||
connection.send_result(msg["id"])
|
connection.send_result(msg["id"])
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue