From f8013655be6fcff339702619a149a2553e9a15fe Mon Sep 17 00:00:00 2001 From: Andrew Sayre <6730289+andrewsayre@users.noreply.github.com> Date: Sun, 26 Jan 2025 04:20:37 -0600 Subject: [PATCH] Move action implementation out of HEOS Coordinator (#136539) * Move play_source * Update property docstring * Correct import location --- homeassistant/components/heos/coordinator.py | 28 +++++-------------- homeassistant/components/heos/media_player.py | 16 ++++++++++- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/homeassistant/components/heos/coordinator.py b/homeassistant/components/heos/coordinator.py index 8ed8449685a..9fc3bb2460f 100644 --- a/homeassistant/components/heos/coordinator.py +++ b/homeassistant/components/heos/coordinator.py @@ -15,7 +15,6 @@ from pyheos import ( HeosError, HeosNowPlayingMedia, HeosOptions, - HeosPlayer, MediaItem, MediaType, PlayerUpdateResult, @@ -25,12 +24,12 @@ from pyheos import ( from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, Platform from homeassistant.core import HassJob, HomeAssistant, callback -from homeassistant.exceptions import ConfigEntryNotReady, ServiceValidationError +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.update_coordinator import DataUpdateCoordinator -from . import DOMAIN +from .const import DOMAIN _LOGGER = logging.getLogger(__name__) @@ -62,6 +61,11 @@ class HeosCoordinator(DataUpdateCoordinator[None]): self._inputs: list[MediaItem] = [] super().__init__(hass, _LOGGER, config_entry=config_entry, name=DOMAIN) + @property + def inputs(self) -> list[MediaItem]: + """Get input sources across all devices.""" + return self._inputs + async def async_setup(self) -> None: """Set up the coordinator; connect to the host; and retrieve initial data.""" # Add before connect as it may occur during initial connection @@ -265,21 +269,3 @@ class HeosCoordinator(DataUpdateCoordinator[None]): ): return favorite.name return None - - async def async_play_source(self, source: str, player: HeosPlayer) -> None: - """Determine type of source and play it.""" - # Favorite - if (index := self.async_get_favorite_index(source)) is not None: - await player.play_preset_station(index) - return - # Input source - for input_source in self._inputs: - if input_source.name == source: - await player.play_media(input_source) - return - - raise ServiceValidationError( - translation_domain=DOMAIN, - translation_key="unknown_source", - translation_placeholders={"source": source}, - ) diff --git a/homeassistant/components/heos/media_player.py b/homeassistant/components/heos/media_player.py index d405b235f76..547f932c21f 100644 --- a/homeassistant/components/heos/media_player.py +++ b/homeassistant/components/heos/media_player.py @@ -306,7 +306,21 @@ class HeosMediaPlayer(CoordinatorEntity[HeosCoordinator], MediaPlayerEntity): @catch_action_error("select source") async def async_select_source(self, source: str) -> None: """Select input source.""" - await self.coordinator.async_play_source(source, self._player) + # Favorite + if (index := self.coordinator.async_get_favorite_index(source)) is not None: + await self._player.play_preset_station(index) + return + # Input source + for input_source in self.coordinator.inputs: + if input_source.name == source: + await self._player.play_media(input_source) + return + + raise ServiceValidationError( + translation_domain=HEOS_DOMAIN, + translation_key="unknown_source", + translation_placeholders={"source": source}, + ) @catch_action_error("set repeat") async def async_set_repeat(self, repeat: RepeatMode) -> None: