Change hass.data storage to runtime.data for Squeezebox (#146482)

This commit is contained in:
peteS-UK 2025-07-14 20:53:53 +02:00 committed by GitHub
parent c9356868f7
commit 0729b3a2f1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 7 additions and 16 deletions

View File

@ -1,7 +1,7 @@
"""The Squeezebox integration.""" """The Squeezebox integration."""
from asyncio import timeout from asyncio import timeout
from dataclasses import dataclass from dataclasses import dataclass, field
from datetime import datetime from datetime import datetime
from http import HTTPStatus from http import HTTPStatus
import logging import logging
@ -37,8 +37,6 @@ from .const import (
DISCOVERY_INTERVAL, DISCOVERY_INTERVAL,
DISCOVERY_TASK, DISCOVERY_TASK,
DOMAIN, DOMAIN,
KNOWN_PLAYERS,
KNOWN_SERVERS,
SERVER_MANUFACTURER, SERVER_MANUFACTURER,
SERVER_MODEL, SERVER_MODEL,
SERVER_MODEL_ID, SERVER_MODEL_ID,
@ -73,6 +71,7 @@ class SqueezeboxData:
coordinator: LMSStatusDataUpdateCoordinator coordinator: LMSStatusDataUpdateCoordinator
server: Server server: Server
known_player_ids: set[str] = field(default_factory=set)
type SqueezeboxConfigEntry = ConfigEntry[SqueezeboxData] type SqueezeboxConfigEntry = ConfigEntry[SqueezeboxData]
@ -187,16 +186,12 @@ async def async_setup_entry(hass: HomeAssistant, entry: SqueezeboxConfigEntry) -
entry.runtime_data = SqueezeboxData(coordinator=server_coordinator, server=lms) entry.runtime_data = SqueezeboxData(coordinator=server_coordinator, server=lms)
# set up player discovery
known_servers = hass.data.setdefault(DOMAIN, {}).setdefault(KNOWN_SERVERS, {})
known_players = known_servers.setdefault(lms.uuid, {}).setdefault(KNOWN_PLAYERS, [])
async def _player_discovery(now: datetime | None = None) -> None: async def _player_discovery(now: datetime | None = None) -> None:
"""Discover squeezebox players by polling server.""" """Discover squeezebox players by polling server."""
async def _discovered_player(player: Player) -> None: async def _discovered_player(player: Player) -> None:
"""Handle a (re)discovered player.""" """Handle a (re)discovered player."""
if player.player_id in known_players: if player.player_id in entry.runtime_data.known_player_ids:
await player.async_update() await player.async_update()
async_dispatcher_send( async_dispatcher_send(
hass, SIGNAL_PLAYER_REDISCOVERED, player.player_id, player.connected hass, SIGNAL_PLAYER_REDISCOVERED, player.player_id, player.connected
@ -207,7 +202,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: SqueezeboxConfigEntry) -
hass, entry, player, lms.uuid hass, entry, player, lms.uuid
) )
await player_coordinator.async_refresh() await player_coordinator.async_refresh()
known_players.append(player.player_id) entry.runtime_data.known_player_ids.add(player.player_id)
async_dispatcher_send( async_dispatcher_send(
hass, SIGNAL_PLAYER_DISCOVERED, player_coordinator hass, SIGNAL_PLAYER_DISCOVERED, player_coordinator
) )

View File

@ -4,8 +4,6 @@ CONF_HTTPS = "https"
DISCOVERY_TASK = "discovery_task" DISCOVERY_TASK = "discovery_task"
DOMAIN = "squeezebox" DOMAIN = "squeezebox"
DEFAULT_PORT = 9000 DEFAULT_PORT = 9000
KNOWN_PLAYERS = "known_players"
KNOWN_SERVERS = "known_servers"
PLAYER_DISCOVERY_UNSUB = "player_discovery_unsub" PLAYER_DISCOVERY_UNSUB = "player_discovery_unsub"
SENSOR_UPDATE_INTERVAL = 60 SENSOR_UPDATE_INTERVAL = 60
SERVER_MANUFACTURER = "https://lyrion.org/" SERVER_MANUFACTURER = "https://lyrion.org/"

View File

@ -60,8 +60,6 @@ from .const import (
DEFAULT_VOLUME_STEP, DEFAULT_VOLUME_STEP,
DISCOVERY_TASK, DISCOVERY_TASK,
DOMAIN, DOMAIN,
KNOWN_PLAYERS,
KNOWN_SERVERS,
SERVER_MANUFACTURER, SERVER_MANUFACTURER,
SERVER_MODEL, SERVER_MODEL,
SERVER_MODEL_ID, SERVER_MODEL_ID,
@ -316,9 +314,9 @@ class SqueezeBoxMediaPlayerEntity(SqueezeboxEntity, MediaPlayerEntity):
async def async_will_remove_from_hass(self) -> None: async def async_will_remove_from_hass(self) -> None:
"""Remove from list of known players when removed from hass.""" """Remove from list of known players when removed from hass."""
known_servers = self.hass.data[DOMAIN][KNOWN_SERVERS] self.coordinator.config_entry.runtime_data.known_player_ids.remove(
known_players = known_servers[self.coordinator.server_uuid][KNOWN_PLAYERS] self.coordinator.player.player_id
known_players.remove(self.coordinator.player.player_id) )
@property @property
def volume_level(self) -> float | None: def volume_level(self) -> float | None: