From b0361f5ab0ed28f2994c7bdb60e8166be699ad28 Mon Sep 17 00:00:00 2001 From: Marvin Schenkel Date: Tue, 27 Jan 2026 15:42:39 +0100 Subject: [PATCH] Fix Sonos looping announcements (#3032) Fix Sonos looping announcements. --- music_assistant/providers/sonos/player.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/music_assistant/providers/sonos/player.py b/music_assistant/providers/sonos/player.py index 4417fc6c..c9256307 100644 --- a/music_assistant/providers/sonos/player.py +++ b/music_assistant/providers/sonos/player.py @@ -386,6 +386,23 @@ class SonosPlayer(Player): if media.source_id: await self._set_sonos_queue_from_mass_queue(media.source_id) + if media.media_type == MediaType.ANNOUNCEMENT: + # We cannot use play_stream_url for announcements because Sonos treats those + # as duration less radio streams and will retry/loop them. + if not media.duration and media.custom_data: + announcement_url = media.custom_data.get("announcement_url", media.uri) + media_info = await async_parse_tags(announcement_url, require_duration=True) + media.duration = media_info.duration + media.queue_item_id = "announcement" + self.sonos_queue.items = [media] + self.sonos_queue.last_updated = time.time() + cloud_queue_url = f"{self.mass.streams.base_url}/sonos_queue/v2.3/" + await self.client.player.group.play_cloud_queue( + cloud_queue_url, + item_id=media.queue_item_id, + ) + return + if ( not self.flow_mode and media.source_id and media.queue_item_id ) or media.media_type == MediaType.PLUGIN_SOURCE: -- 2.34.1