fix synced or ugp playback on ugp and airplay
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 18 Mar 2024 08:30:20 +0000 (09:30 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 18 Mar 2024 08:30:20 +0000 (09:30 +0100)
music_assistant/server/providers/airplay/__init__.py
music_assistant/server/providers/snapcast/__init__.py

index 8e4b159fc17d548cd69c2ea45f41fbe2d1d134e0..08071ac25b5a0216af47006ecc4ab592fbe6c152 100644 (file)
@@ -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(
index 0968cc2f18cac92587e3d07249f49506a6bd3c09..11d352270d726dc9fc25da90cad51e0a1bfb167c 100644 (file)
@@ -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,