mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
parent
f245bbd8dd
commit
7f640252a1
@ -6,7 +6,6 @@ entities to update. Entities subscribe to entity-specific updates within the ent
|
||||
"""
|
||||
|
||||
from collections.abc import Callable, Sequence
|
||||
from datetime import datetime, timedelta
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
@ -25,10 +24,10 @@ from pyheos import (
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, Platform
|
||||
from homeassistant.core import CALLBACK_TYPE, HassJob, HomeAssistant, callback
|
||||
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
|
||||
from homeassistant.exceptions import ConfigEntryNotReady
|
||||
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
||||
from homeassistant.helpers.event import async_call_later
|
||||
from homeassistant.helpers.debounce import Debouncer
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||
|
||||
from .const import DOMAIN
|
||||
@ -60,7 +59,13 @@ class HeosCoordinator(DataUpdateCoordinator[None]):
|
||||
)
|
||||
)
|
||||
self._platform_callbacks: list[Callable[[Sequence[HeosPlayer]], None]] = []
|
||||
self._update_sources_pending: bool = False
|
||||
self._update_sources_debouncer = Debouncer(
|
||||
hass,
|
||||
_LOGGER,
|
||||
immediate=True,
|
||||
cooldown=2.0,
|
||||
function=self._async_update_sources,
|
||||
)
|
||||
self._source_list: list[str] = []
|
||||
self._favorites: dict[int, MediaItem] = {}
|
||||
self._inputs: Sequence[MediaItem] = []
|
||||
@ -182,31 +187,9 @@ class HeosCoordinator(DataUpdateCoordinator[None]):
|
||||
if event == const.EVENT_PLAYERS_CHANGED:
|
||||
assert data is not None
|
||||
self._async_handle_player_update_result(data)
|
||||
elif (
|
||||
event in (const.EVENT_SOURCES_CHANGED, const.EVENT_USER_CHANGED)
|
||||
and not self._update_sources_pending
|
||||
):
|
||||
# Update the sources after a brief delay as we may have received multiple qualifying
|
||||
# events at once and devices cannot handle immediately attempting to refresh sources.
|
||||
self._update_sources_pending = True
|
||||
|
||||
async def update_sources_job(_: datetime | None = None) -> None:
|
||||
await self._async_update_sources()
|
||||
self._update_sources_pending = False
|
||||
self.async_update_listeners()
|
||||
|
||||
assert self.config_entry is not None
|
||||
self.config_entry.async_on_unload(
|
||||
async_call_later(
|
||||
self.hass,
|
||||
timedelta(seconds=1),
|
||||
HassJob(
|
||||
update_sources_job,
|
||||
"heos_update_sources",
|
||||
cancel_on_shutdown=True,
|
||||
),
|
||||
)
|
||||
)
|
||||
elif event in (const.EVENT_SOURCES_CHANGED, const.EVENT_USER_CHANGED):
|
||||
# Debounce because we may have received multiple qualifying events in rapid succession.
|
||||
await self._update_sources_debouncer.async_call()
|
||||
self.async_update_listeners()
|
||||
|
||||
def _async_update_player_ids(self, updated_player_ids: dict[int, int]) -> None:
|
||||
|
Loading…
x
Reference in New Issue
Block a user