Derive stream contenttype from grouped player childs (#352)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 31 May 2022 14:21:37 +0000 (16:21 +0200)
committerGitHub <noreply@github.com>
Tue, 31 May 2022 14:21:37 +0000 (16:21 +0200)
* Derive stream contenttype for grouped player childs

music_assistant/models/player.py
music_assistant/models/player_queue.py

index 26c2dfa6b4e22ee405ff66407ace788be362f318..3af07abc3cb0e53c890f073522c2a49ab6c79928 100755 (executable)
@@ -387,6 +387,21 @@ class PlayerGroup(Player):
             return child_player.current_url
         return super().current_url
 
+    @property
+    def supported_content_types(self) -> Tuple[ContentType]:
+        """Return the content types this player supports."""
+        # return contenttypes that are supported by all child players
+        return tuple(
+            content_type
+            for content_type in ContentType
+            if all(
+                (
+                    content_type in child_player.supported_content_types
+                    for child_player in self._get_child_players(False, False)
+                )
+            )
+        )
+
     async def stop(self) -> None:
         """Send STOP command to player."""
         if not self.use_multi_stream:
index 3cfdf43e9d760725b3259f157562f221c73eba3a..628bfccca33ef30576c3347db4a3851e48fa3d6d 100644 (file)
@@ -8,7 +8,6 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
 
 from music_assistant.helpers.audio import get_stream_details
 from music_assistant.models.enums import (
-    ContentType,
     EventType,
     MediaType,
     QueueOption,
@@ -311,8 +310,6 @@ class PlayerQueue:
         if self.player.use_multi_stream:
             # multi stream enabled, all child players should receive the same audio stream
             # redirect command to all (powered) players
-            # TODO: this assumes that all client players support flac
-            content_type = ContentType.FLAC
             coros = []
             expected_clients = set()
             for child_id in self.player.group_childs:
@@ -320,7 +317,7 @@ class PlayerQueue:
                     if child_player.powered:
                         # TODO: this assumes that all client players support flac
                         player_url = self.mass.streams.get_stream_url(
-                            self.queue_id, child_id, content_type
+                            self.queue_id, child_id, self._settings.stream_type
                         )
                         expected_clients.add(child_id)
                         coros.append(child_player.play_url(player_url))
@@ -328,7 +325,7 @@ class PlayerQueue:
                 # TODO: this assumes that all client players support flac
                 self.queue_id,
                 expected_clients,
-                content_type,
+                self._settings.stream_type,
             )
             await asyncio.gather(*coros)
         elif not passive: