Fix: Resolve stream_url also for enqueue next media
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 24 Feb 2026 18:37:58 +0000 (19:37 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 24 Feb 2026 18:37:58 +0000 (19:37 +0100)
music_assistant/providers/chromecast/player.py
music_assistant/providers/dlna/player.py
music_assistant/providers/musiccast/player.py
music_assistant/providers/roku_media_assistant/player.py
music_assistant/providers/sonos_s1/player.py
music_assistant/providers/squeezelite/player.py

index d71df7cea5b206b2e03a477666a8cb5047111116..e81fc8c33f8d8792370da442fbdb7e7cd0d32676 100644 (file)
@@ -467,6 +467,7 @@ class ChromecastPlayer(Player):
         """Handle enqueuing of the next item on the player."""
         next_item_id = None
         status = self.cc.media_controller.status
+        media.uri = await self.provider.mass.streams.resolve_stream_url(self.player_id, media)
         # lookup position of current track in cast queue
         cast_current_item_id = getattr(status, "current_item_id", 0)
         cast_queue_items = getattr(status, "items", [])
index a4c130eb340f45d0a3ac9abd90a665e26ed15296..14854a25603fe186a67ed3ab7502e67b0d82611d 100644 (file)
@@ -448,8 +448,9 @@ class DLNAPlayer(Player):
         assert self.device is not None  # for type checking
         didl_metadata = create_didl_metadata(media)
         title = media.title or media.uri
+        url = await self.provider.mass.streams.resolve_stream_url(self.player_id, media)
         try:
-            await self.device.async_set_next_transport_uri(media.uri, title, didl_metadata)
+            await self.device.async_set_next_transport_uri(url, title, didl_metadata)
         except UpnpError:
             self.logger.error(
                 "Enqueuing the next track failed for player %s - "
index 8bb9c576c1c62eb725c7e67b2c731d1e3b4ada26..f8b13b45aeb9b5b2efb3aaad2ce10729b66f45eb 100644 (file)
@@ -657,6 +657,7 @@ class MusicCastPlayer(Player):
 
     async def enqueue_next_media(self, media: PlayerMedia) -> None:
         """Enqueue next command."""
+        media.uri = await self.provider.mass.streams.resolve_stream_url(self.player_id, media)
         await avt_set_url(
             self.mass.http_session,
             self.physical_device,
index 557343215fdcbbe2cdbe299aefe6231a0c531b59..1dcb6c00c87bb498b2f885b86248474a6e4d24dd 100644 (file)
@@ -226,6 +226,7 @@ class MediaAssistantPlayer(Player):
 
     async def enqueue_next_media(self, media: PlayerMedia) -> None:
         """Handle enqueuing of the next (queue) item on the player."""
+        stream_url = await self.provider.mass.streams.resolve_stream_url(self.player_id, media)
         try:
             device_info = await self.roku.update()
 
@@ -239,7 +240,7 @@ class MediaAssistantPlayer(Player):
             if app_running:
                 await self.roku_input(
                     {
-                        "u": media.uri,
+                        "u": stream_url,
                         "t": "a",
                         "albumName": media.album,
                         "songName": media.title,
index 51d12dab66821be2acdff056f761a4c151f83ecb..c9b4a827b6a4ae959d794231da20084df90206de 100644 (file)
@@ -235,15 +235,15 @@ class SonosPlayer(Player):
             )
             raise PlayerCommandFailed(msg)
 
+        stream_url = await self.provider.mass.streams.resolve_stream_url(self.player_id, media)
         if not media.duration:
             # Sonos really does not like FLAC streams without duration
-            media.uri = media.uri.replace(".flac", ".mp3")
+            stream_url = stream_url.replace(".flac", ".mp3")
 
         didl_metadata = create_didl_metadata(media)
         is_announcement = media.media_type == MediaType.ANNOUNCEMENT
         force_radio = False if is_announcement else not media.duration
 
-        stream_url = await self.provider.mass.streams.resolve_stream_url(self.player_id, media)
         await asyncio.to_thread(
             self.soco.play_uri, stream_url, meta=didl_metadata, force_radio=force_radio
         )
@@ -260,12 +260,13 @@ class SonosPlayer(Player):
             raise PlayerCommandFailed(msg)
 
         didl_metadata = create_didl_metadata(media)
+        stream_url = await self.provider.mass.streams.resolve_stream_url(self.player_id, media)
 
         def add_to_queue() -> None:
             self.soco.avTransport.SetNextAVTransportURI(
                 [
                     ("InstanceID", 0),
-                    ("NextURI", media.uri),
+                    ("NextURI", stream_url),
                     ("NextURIMetaData", didl_metadata),
                 ]
             )
index eac580e7bf6b2a30421ce7a9633034cb4c74692a..98119686ba0c9e7e2fb12d093c71a1c55f647bfd 100644 (file)
@@ -297,9 +297,10 @@ class SqueezelitePlayer(Player):
 
     async def enqueue_next_media(self, media: PlayerMedia) -> None:
         """Handle enqueuing next media item."""
+        stream_url = await self.provider.mass.streams.resolve_stream_url(self.player_id, media)
         await self._handle_play_url_for_slimplayer(
             self.client,
-            url=media.uri,
+            url=stream_url,
             media=media,
             enqueue=True,
             send_flush=False,