From 5f3f6a7fa162c7eda52a07e312daa7f0de9ac0d3 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Mon, 18 Mar 2024 09:30:20 +0100 Subject: [PATCH] fix synced or ugp playback on ugp and airplay --- music_assistant/server/providers/airplay/__init__.py | 9 +++++++-- music_assistant/server/providers/snapcast/__init__.py | 8 +++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/music_assistant/server/providers/airplay/__init__.py b/music_assistant/server/providers/airplay/__init__.py index 8e4b159f..08071ac2 100644 --- a/music_assistant/server/providers/airplay/__init__.py +++ b/music_assistant/server/providers/airplay/__init__.py @@ -49,6 +49,7 @@ from music_assistant.server.helpers.audio import ( ) from music_assistant.server.helpers.process import check_output from music_assistant.server.models.player_provider import PlayerProvider +from music_assistant.server.providers.ugp import UGP_PREFIX if TYPE_CHECKING: from music_assistant.common.models.config_entries import ProviderConfig @@ -622,9 +623,13 @@ class AirplayProvider(PlayerProvider): if queue_item.media_type == MediaType.ANNOUNCEMENT: # stream announcement url directly stream_job = None - elif stream_job := self.mass.streams.multi_client_jobs.get(queue_item.queue_id): + elif ( + queue_item.queue_id.startswith(UGP_PREFIX) + and (stream_job := self.mass.streams.multi_client_jobs.get(queue_item.queue_id)) + and stream_job.pending + ): # handle special case for UGP multi client stream - stream_job = self.mass.streams.multi_client_jobs.get(queue_item.queue_id) + pass elif player.group_childs: # create a new multi client flow stream stream_job = await self.mass.streams.create_multi_client_stream_job( diff --git a/music_assistant/server/providers/snapcast/__init__.py b/music_assistant/server/providers/snapcast/__init__.py index 0968cc2f..11d35227 100644 --- a/music_assistant/server/providers/snapcast/__init__.py +++ b/music_assistant/server/providers/snapcast/__init__.py @@ -31,6 +31,7 @@ from music_assistant.common.models.media_items import AudioFormat from music_assistant.common.models.player import DeviceInfo, Player from music_assistant.server.helpers.audio import get_media_stream from music_assistant.server.models.player_provider import PlayerProvider +from music_assistant.server.providers.ugp import UGP_PREFIX if TYPE_CHECKING: from snapcast.control.group import Snapgroup @@ -266,8 +267,13 @@ class SnapCastProvider(PlayerProvider): audio_iterator = get_media_stream( self.mass, queue_item.streamdetails, pcm_format=pcm_format ) - elif stream_job := self.mass.streams.multi_client_jobs.get(queue_item.queue_id): + elif ( + queue_item.queue_id.startswith(UGP_PREFIX) + and (stream_job := self.mass.streams.multi_client_jobs.get(queue_item.queue_id)) + and stream_job.pending + ): # handle special case for UGP multi client stream + stream_job = self.mass.streams.multi_client_jobs.get(queue_item.queue_id) stream_job.expected_players.add(player_id) audio_iterator = stream_job.subscribe( player_id=player_id, -- 2.34.1