From: Marcel van der Veldt Date: Mon, 24 Feb 2025 17:18:05 +0000 (+0100) Subject: Chore: code quality changes in airplay prov X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=d97a5583eac7edc470885ab98c4c3513243ff23a;p=music-assistant-server.git Chore: code quality changes in airplay prov --- diff --git a/music_assistant/providers/airplay/provider.py b/music_assistant/providers/airplay/provider.py index 5806ea69..29e3ac98 100644 --- a/music_assistant/providers/airplay/provider.py +++ b/music_assistant/providers/airplay/provider.py @@ -18,6 +18,7 @@ from music_assistant_models.enums import ( PlayerType, ProviderFeature, ) +from music_assistant_models.errors import PlayerUnavailableError from music_assistant_models.media_items import AudioFormat from music_assistant_models.player import DeviceInfo, Player, PlayerMedia from zeroconf import ServiceStateChange @@ -37,7 +38,7 @@ from music_assistant.constants import ( ) from music_assistant.helpers.datetime import utc from music_assistant.helpers.ffmpeg import get_ffmpeg_stream -from music_assistant.helpers.util import TaskManager, get_ip_pton, lock, select_free_port +from music_assistant.helpers.util import get_ip_pton, lock, select_free_port from music_assistant.models.player_provider import PlayerProvider from music_assistant.providers.airplay.raop import RaopStreamSession from music_assistant.providers.player_group import PlayerGroupProvider @@ -295,20 +296,23 @@ class AirplayProvider(PlayerProvider): media: PlayerMedia, ) -> None: """Handle PLAY MEDIA on given player.""" - player = self.mass.players.get(player_id) - if not player: - return + if not (player := self.mass.players.get(player_id)): + # this should not happen, but guard anyways + raise PlayerUnavailableError if player.synced_to: - # should not happen, but just in case + # this should not happen, but guard anyways raise RuntimeError("Player is synced") + if not (airplay_player := self._players.get(player_id)): + # this should not happen, but guard anyways + raise PlayerUnavailableError # set the active source for the player to the media queue # this accounts for syncgroups and linked players (e.g. sonos) player.active_source = media.queue_id player.current_media = media # always stop existing stream first - async with TaskManager(self.mass) as tg: - for airplay_player in self._get_sync_clients(player_id): - tg.create_task(airplay_player.cmd_stop(update_state=False)) + if airplay_player.raop_stream and airplay_player.raop_stream.running: + await airplay_player.cmd_stop() + # select audio source if media.media_type == MediaType.ANNOUNCEMENT: # special case: stream announcement