Fix: sonos active source selection
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 17 Jan 2025 22:35:52 +0000 (23:35 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 17 Jan 2025 22:35:52 +0000 (23:35 +0100)
music_assistant/providers/sonos/player.py
music_assistant/providers/sonos/provider.py

index 78794a5cf440256ece4522a08715e5eb120c1315..ee516d59e48c9ad96af4c4508663c9aa34f5fa19 100644 (file)
@@ -314,8 +314,12 @@ class SonosPlayer:
         elif active_service == MusicService.SPOTIFY:
             self.mass_player.active_source = SOURCE_SPOTIFY
         elif active_service == MusicService.MUSIC_ASSISTANT:
-            if object_id := container.get("id", {}).get("objectId"):
+            if self.client.player.is_coordinator:
+                self.mass_player.active_source = self.mass_player.player_id
+            elif object_id := container.get("id", {}).get("objectId"):
                 self.mass_player.active_source = object_id.split(":")[-1]
+            else:
+                self.mass_player.active_source = None
         else:
             # its playing some service we did not yet map
             self.mass_player.active_source = active_service
@@ -410,7 +414,7 @@ class SonosPlayer:
                     self.mass.players.update(self.player_id)
                     self.reconnect(5)
 
-        self._listen_task = asyncio.create_task(_listener())
+        self._listen_task = self.mass.create_task(_listener())
         await init_ready.wait()
 
     async def _disconnect(self) -> None:
index ec2f83d8e55af357c8c17ca1bed3087cbb27c4c1..e446c1d8ba9d42b052c9abdf30418d47b26ce720 100644 (file)
@@ -523,7 +523,7 @@ class SonosPlayerProvider(PlayerProvider):
             if "positionMillis" not in item:
                 continue
             mass_player.current_media = PlayerMedia(
-                uri=item["mediaUrl"], queue_id=sonos_playback_id, queue_item_id=item["id"]
+                uri=item["mediaUrl"], queue_id=sonos_player_id, queue_item_id=item["id"]
             )
             mass_player.elapsed_time = item["positionMillis"] / 1000
             mass_player.elapsed_time_last_updated = time.time()