move streams controller (#248)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 8 Apr 2022 06:04:44 +0000 (08:04 +0200)
committerGitHub <noreply@github.com>
Fri, 8 Apr 2022 06:04:44 +0000 (08:04 +0200)
music_assistant/controllers/players.py
music_assistant/mass.py
music_assistant/models/player_queue.py

index 15efad111252deabe3eec8d4cbdfad7af7764a5a..a7c777916a96c412e2353f2853ee5e7dc324e4fa 100755 (executable)
@@ -4,7 +4,6 @@ from __future__ import annotations
 from typing import Dict, Tuple, Union
 
 from music_assistant.constants import EventType
-from music_assistant.controllers.stream import StreamController
 from music_assistant.helpers.typing import MusicAssistant
 from music_assistant.models.errors import AlreadyRegisteredError
 from music_assistant.models.player import Player, PlayerGroup
@@ -18,13 +17,12 @@ DB_TABLE = "queue_settings"
 class PlayerController:
     """Controller holding all logic to play music from MusicProviders to supported players."""
 
-    def __init__(self, mass: MusicAssistant, stream_port: int) -> None:
+    def __init__(self, mass: MusicAssistant) -> None:
         """Initialize class."""
         self.mass = mass
         self.logger = mass.logger.getChild("players")
         self._players: Dict[str, PlayerType] = {}
         self._player_queues: Dict[str, PlayerQueue] = {}
-        self.streams = StreamController(mass, stream_port)
 
     async def setup(self) -> None:
         """Async initialize of module."""
@@ -38,7 +36,6 @@ class PlayerController:
                     volume_normalization_enabled BOOLEAN,
                     volume_normalization_target INTEGER)"""
             )
-        await self.streams.setup()
 
     @property
     def players(self) -> Tuple[PlayerType]:
index 6d208c6bcd654d8ca35898cd4d44e8c16f2fc1e7..0a00f01b9feeb40512041b026607c6c2f5b41cc3 100644 (file)
@@ -15,6 +15,7 @@ from music_assistant.constants import EventType
 from music_assistant.controllers.metadata import MetaDataController
 from music_assistant.controllers.music import MusicController
 from music_assistant.controllers.players import PlayerController
+from music_assistant.controllers.stream import StreamController
 from music_assistant.helpers.cache import Cache
 from music_assistant.helpers.database import Database
 
@@ -52,7 +53,8 @@ class MusicAssistant:
         self.cache = Cache(self)
         self.metadata = MetaDataController(self)
         self.music = MusicController(self)
-        self.players = PlayerController(self, stream_port)
+        self.players = PlayerController(self)
+        self.streams = StreamController(self, stream_port)
         self._tracked_tasks: List[asyncio.Task] = []
         self.closed = False
 
@@ -71,6 +73,7 @@ class MusicAssistant:
         await self.music.setup()
         await self.metadata.setup()
         await self.players.setup()
+        await self.streams.setup()
         self.create_task(self.__process_jobs())
 
     async def stop(self) -> None:
index e516f0698caaf0b94e54fee6a3b2b0e071d6d24d..1a31d56ad16e90fb8f6c43a1e05b5cf90329637e 100644 (file)
@@ -90,7 +90,7 @@ class PlayerQueue:
         self._update_task: Task = None
         self._signal_next: bool = False
         self._last_player_update: int = 0
-        self._stream_url: str = self.mass.players.streams.get_stream_url(self.queue_id)
+        self._stream_url: str = self.mass.streams.get_stream_url(self.queue_id)
 
     async def setup(self) -> None:
         """Handle async setup of instance."""
@@ -363,9 +363,7 @@ class PlayerQueue:
     async def play_index(self, index: Union[int, str]) -> None:
         """Play item at index (or item_id) X in queue."""
         if self.player.use_multi_stream:
-            await self.mass.players.streams.stop_multi_client_queue_stream(
-                self.queue_id
-            )
+            await self.mass.streams.stop_multi_client_queue_stream(self.queue_id)
         if not isinstance(index, int):
             index = self.index_by_id(index)
         if index is None:
@@ -375,7 +373,7 @@ class PlayerQueue:
         self._current_index = index
         self._next_start_index = index
         # send stream url to player connected to this queue
-        self._stream_url = self.mass.players.streams.get_stream_url(self.queue_id)
+        self._stream_url = self.mass.streams.get_stream_url(self.queue_id)
 
         if self.player.use_multi_stream:
             # multi stream enabled, all child players should receive the same audio stream
@@ -385,13 +383,13 @@ class PlayerQueue:
             for child_id in self.player.group_childs:
                 if child_player := self.mass.players.get_player(child_id):
                     if child_player.powered:
-                        player_url = self.mass.players.streams.get_stream_url(
+                        player_url = self.mass.streams.get_stream_url(
                             self.queue_id, child_id
                         )
                         expected_clients.add(child_id)
                         tasks.append(child_player.play_url(player_url))
                         tasks.append(child_player.pause())
-            await self.mass.players.streams.start_multi_client_queue_stream(
+            await self.mass.streams.start_multi_client_queue_stream(
                 self.queue_id, expected_clients, ContentType.FLAC
             )
             await asyncio.gather(*tasks)