mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Clean-up HEOS entity event setup (#134683)
* Use async_on_remove * Remove redundant signal clearing
This commit is contained in:
parent
c7993eff99
commit
c9a607aa45
@ -168,7 +168,6 @@ class ControllerManager:
|
|||||||
self._device_registry = None
|
self._device_registry = None
|
||||||
self._entity_registry = None
|
self._entity_registry = None
|
||||||
self.controller = controller
|
self.controller = controller
|
||||||
self._signals = []
|
|
||||||
|
|
||||||
async def connect_listeners(self):
|
async def connect_listeners(self):
|
||||||
"""Subscribe to events of interest."""
|
"""Subscribe to events of interest."""
|
||||||
@ -176,23 +175,17 @@ class ControllerManager:
|
|||||||
self._entity_registry = er.async_get(self._hass)
|
self._entity_registry = er.async_get(self._hass)
|
||||||
|
|
||||||
# Handle controller events
|
# Handle controller events
|
||||||
self._signals.append(
|
self.controller.dispatcher.connect(
|
||||||
self.controller.dispatcher.connect(
|
heos_const.SIGNAL_CONTROLLER_EVENT, self._controller_event
|
||||||
heos_const.SIGNAL_CONTROLLER_EVENT, self._controller_event
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Handle connection-related events
|
# Handle connection-related events
|
||||||
self._signals.append(
|
self.controller.dispatcher.connect(
|
||||||
self.controller.dispatcher.connect(
|
heos_const.SIGNAL_HEOS_EVENT, self._heos_event
|
||||||
heos_const.SIGNAL_HEOS_EVENT, self._heos_event
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
async def disconnect(self):
|
async def disconnect(self):
|
||||||
"""Disconnect subscriptions."""
|
"""Disconnect subscriptions."""
|
||||||
for signal_remove in self._signals:
|
|
||||||
signal_remove()
|
|
||||||
self._signals.clear()
|
|
||||||
self.controller.dispatcher.disconnect_all()
|
self.controller.dispatcher.disconnect_all()
|
||||||
await self.controller.disconnect()
|
await self.controller.disconnect()
|
||||||
|
|
||||||
|
@ -123,7 +123,6 @@ class HeosMediaPlayer(MediaPlayerEntity):
|
|||||||
"""Initialize."""
|
"""Initialize."""
|
||||||
self._media_position_updated_at = None
|
self._media_position_updated_at = None
|
||||||
self._player = player
|
self._player = player
|
||||||
self._signals: list = []
|
|
||||||
self._source_manager = source_manager
|
self._source_manager = source_manager
|
||||||
self._group_manager = group_manager
|
self._group_manager = group_manager
|
||||||
self._attr_unique_id = str(player.player_id)
|
self._attr_unique_id = str(player.player_id)
|
||||||
@ -150,13 +149,13 @@ class HeosMediaPlayer(MediaPlayerEntity):
|
|||||||
async def async_added_to_hass(self) -> None:
|
async def async_added_to_hass(self) -> None:
|
||||||
"""Device added to hass."""
|
"""Device added to hass."""
|
||||||
# Update state when attributes of the player change
|
# Update state when attributes of the player change
|
||||||
self._signals.append(
|
self.async_on_remove(
|
||||||
self._player.heos.dispatcher.connect(
|
self._player.heos.dispatcher.connect(
|
||||||
heos_const.SIGNAL_PLAYER_EVENT, self._player_update
|
heos_const.SIGNAL_PLAYER_EVENT, self._player_update
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
# Update state when heos changes
|
# Update state when heos changes
|
||||||
self._signals.append(
|
self.async_on_remove(
|
||||||
async_dispatcher_connect(self.hass, SIGNAL_HEOS_UPDATED, self._heos_updated)
|
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
|
# 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
|
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
|
@property
|
||||||
def available(self) -> bool:
|
def available(self) -> bool:
|
||||||
"""Return True if the device is available."""
|
"""Return True if the device is available."""
|
||||||
|
@ -17,11 +17,7 @@ rules:
|
|||||||
docs-high-level-description: done
|
docs-high-level-description: done
|
||||||
docs-installation-instructions: done
|
docs-installation-instructions: done
|
||||||
docs-removal-instructions: todo
|
docs-removal-instructions: todo
|
||||||
entity-event-setup:
|
entity-event-setup: done
|
||||||
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-unique-id: done
|
entity-unique-id: done
|
||||||
has-entity-name: done
|
has-entity-name: done
|
||||||
runtime-data: done
|
runtime-data: done
|
||||||
|
Loading…
x
Reference in New Issue
Block a user