Clean-up HEOS entity event setup (#134683)

* Use async_on_remove

* Remove redundant signal clearing
This commit is contained in:
Andrew Sayre 2025-01-04 11:32:19 -06:00 committed by GitHub
parent c7993eff99
commit c9a607aa45
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 8 additions and 26 deletions

View File

@ -168,7 +168,6 @@ class ControllerManager:
self._device_registry = None
self._entity_registry = None
self.controller = controller
self._signals = []
async def connect_listeners(self):
"""Subscribe to events of interest."""
@ -176,23 +175,17 @@ class ControllerManager:
self._entity_registry = er.async_get(self._hass)
# Handle controller events
self._signals.append(
self.controller.dispatcher.connect(
heos_const.SIGNAL_CONTROLLER_EVENT, self._controller_event
)
self.controller.dispatcher.connect(
heos_const.SIGNAL_CONTROLLER_EVENT, self._controller_event
)
# Handle connection-related events
self._signals.append(
self.controller.dispatcher.connect(
heos_const.SIGNAL_HEOS_EVENT, self._heos_event
)
self.controller.dispatcher.connect(
heos_const.SIGNAL_HEOS_EVENT, self._heos_event
)
async def disconnect(self):
"""Disconnect subscriptions."""
for signal_remove in self._signals:
signal_remove()
self._signals.clear()
self.controller.dispatcher.disconnect_all()
await self.controller.disconnect()

View File

@ -123,7 +123,6 @@ class HeosMediaPlayer(MediaPlayerEntity):
"""Initialize."""
self._media_position_updated_at = None
self._player = player
self._signals: list = []
self._source_manager = source_manager
self._group_manager = group_manager
self._attr_unique_id = str(player.player_id)
@ -150,13 +149,13 @@ class HeosMediaPlayer(MediaPlayerEntity):
async def async_added_to_hass(self) -> None:
"""Device added to hass."""
# Update state when attributes of the player change
self._signals.append(
self.async_on_remove(
self._player.heos.dispatcher.connect(
heos_const.SIGNAL_PLAYER_EVENT, self._player_update
)
)
# Update state when heos changes
self._signals.append(
self.async_on_remove(
async_dispatcher_connect(self.hass, SIGNAL_HEOS_UPDATED, self._heos_updated)
)
# Register this player's entity_id so it can be resolved by the group manager
@ -304,12 +303,6 @@ class HeosMediaPlayer(MediaPlayerEntity):
self._player.player_id, self.entity_id
)
async def async_will_remove_from_hass(self) -> None:
"""Disconnect the device when removed."""
for signal_remove in self._signals:
signal_remove()
self._signals.clear()
@property
def available(self) -> bool:
"""Return True if the device is available."""

View File

@ -17,11 +17,7 @@ rules:
docs-high-level-description: done
docs-installation-instructions: done
docs-removal-instructions: todo
entity-event-setup:
status: todo
comment: |
Simplify by using async_on_remove instead of keeping track of listeners to remove
later in async_will_remove_from_hass.
entity-event-setup: done
entity-unique-id: done
has-entity-name: done
runtime-data: done