Use runtime_data in yamaha_musiccast (#168691)

This commit is contained in:
epenet
2026-04-21 11:33:02 +02:00
committed by GitHub
parent 6e61a60eba
commit e620426002
6 changed files with 32 additions and 33 deletions
@@ -8,13 +8,12 @@ from aiohttp import DummyCookieJar
from aiomusiccast.musiccast_device import MusicCastDevice
from homeassistant.components import ssdp
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_create_clientsession
from .const import CONF_SERIAL, CONF_UPNP_DESC, DOMAIN
from .coordinator import MusicCastDataUpdateCoordinator
from .const import CONF_SERIAL, CONF_UPNP_DESC
from .coordinator import MusicCastConfigEntry, MusicCastDataUpdateCoordinator
PLATFORMS = [Platform.MEDIA_PLAYER, Platform.NUMBER, Platform.SELECT, Platform.SWITCH]
@@ -38,7 +37,7 @@ async def get_upnp_desc(hass: HomeAssistant, host: str):
return upnp_desc
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: MusicCastConfigEntry) -> bool:
"""Set up MusicCast from a config entry."""
if entry.data.get(CONF_UPNP_DESC) is None:
@@ -60,8 +59,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
await coordinator.async_config_entry_first_refresh()
coordinator.musiccast.build_capabilities()
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = coordinator
entry.runtime_data = coordinator
await coordinator.musiccast.device.enable_polling()
@@ -71,16 +69,15 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: MusicCastConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
hass.data[DOMAIN][entry.entry_id].musiccast.device.disable_polling()
hass.data[DOMAIN].pop(entry.entry_id)
entry.runtime_data.musiccast.device.disable_polling()
return unload_ok
async def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
async def async_reload_entry(hass: HomeAssistant, entry: MusicCastConfigEntry) -> None:
"""Reload config entry."""
await hass.config_entries.async_reload(entry.entry_id)
@@ -22,14 +22,19 @@ _LOGGER = logging.getLogger(__name__)
SCAN_INTERVAL = timedelta(seconds=60)
type MusicCastConfigEntry = ConfigEntry[MusicCastDataUpdateCoordinator]
class MusicCastDataUpdateCoordinator(DataUpdateCoordinator[MusicCastData]):
"""Class to manage fetching data from the API."""
config_entry: ConfigEntry
config_entry: MusicCastConfigEntry
def __init__(
self, hass: HomeAssistant, config_entry: ConfigEntry, client: MusicCastDevice
self,
hass: HomeAssistant,
config_entry: MusicCastConfigEntry,
client: MusicCastDevice,
) -> None:
"""Initialize."""
self.musiccast = client
@@ -21,7 +21,6 @@ from homeassistant.components.media_player import (
RepeatMode,
async_process_play_media_url,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity import Entity
@@ -38,7 +37,7 @@ from .const import (
MEDIA_CLASS_MAPPING,
NULL_GROUP,
)
from .coordinator import MusicCastDataUpdateCoordinator
from .coordinator import MusicCastConfigEntry
from .entity import MusicCastDeviceEntity
_LOGGER = logging.getLogger(__name__)
@@ -55,11 +54,11 @@ MUSIC_PLAYER_BASE_SUPPORT = (
async def async_setup_entry(
hass: HomeAssistant,
entry: ConfigEntry,
entry: MusicCastConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up MusicCast sensor based on a config entry."""
coordinator: MusicCastDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
name = coordinator.data.network_name
@@ -614,11 +613,14 @@ class MusicCastMediaPlayer(MusicCastDeviceEntity, MediaPlayerEntity):
def get_all_mc_entities(self) -> list[MusicCastMediaPlayer]:
"""Return all media player entities of the musiccast system."""
entries: list[MusicCastConfigEntry] = (
self.hass.config_entries.async_loaded_entries(DOMAIN)
)
entities = []
for coordinator in self.hass.data[DOMAIN].values():
for entry in entries:
entities += [
entity
for entity in coordinator.entities
for entity in entry.runtime_data.entities
if isinstance(entity, MusicCastMediaPlayer)
]
return entities
@@ -5,22 +5,20 @@ from __future__ import annotations
from aiomusiccast.capabilities import NumberSetter
from homeassistant.components.number import NumberEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .const import DOMAIN
from .coordinator import MusicCastDataUpdateCoordinator
from .coordinator import MusicCastConfigEntry, MusicCastDataUpdateCoordinator
from .entity import MusicCastCapabilityEntity
async def async_setup_entry(
hass: HomeAssistant,
entry: ConfigEntry,
entry: MusicCastConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up MusicCast number entities based on a config entry."""
coordinator: MusicCastDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
number_entities = [
NumberCapability(coordinator, capability)
@@ -5,22 +5,21 @@ from __future__ import annotations
from aiomusiccast.capabilities import OptionSetter
from homeassistant.components.select import SelectEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .const import DOMAIN, TRANSLATION_KEY_MAPPING
from .coordinator import MusicCastDataUpdateCoordinator
from .const import TRANSLATION_KEY_MAPPING
from .coordinator import MusicCastConfigEntry, MusicCastDataUpdateCoordinator
from .entity import MusicCastCapabilityEntity
async def async_setup_entry(
hass: HomeAssistant,
entry: ConfigEntry,
entry: MusicCastConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up MusicCast select entities based on a config entry."""
coordinator: MusicCastDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
select_entities = [
SelectableCapability(coordinator, capability)
@@ -5,22 +5,20 @@ from typing import Any
from aiomusiccast.capabilities import BinarySetter
from homeassistant.components.switch import SwitchEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from .const import DOMAIN
from .coordinator import MusicCastDataUpdateCoordinator
from .coordinator import MusicCastConfigEntry
from .entity import MusicCastCapabilityEntity
async def async_setup_entry(
hass: HomeAssistant,
entry: ConfigEntry,
entry: MusicCastConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up MusicCast sensor based on a config entry."""
coordinator: MusicCastDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
switch_entities = [
SwitchCapability(coordinator, capability)