Fix group state updating
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 24 Oct 2024 23:00:14 +0000 (01:00 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 24 Oct 2024 23:00:14 +0000 (01:00 +0200)
music_assistant/server/controllers/players.py
music_assistant/server/providers/player_group/__init__.py
music_assistant/server/providers/slimproto/__init__.py

index 1e783174a2fe8bfe3f2b13ac014a18f7ccf08b71..ffb1881888cf7ab1a46332e57d498e6bbbf3ebd2 100644 (file)
@@ -836,7 +836,6 @@ class PlayerController(CoreController):
             prev_state,
             new_state,
             ignore_keys=[
-                "elapsed_time",
                 "elapsed_time_last_updated",
                 "seq_no",
                 "last_poll",
@@ -848,13 +847,15 @@ class PlayerController(CoreController):
             # ignore updates for disabled players
             return
 
-        # always signal update to the playerqueue
-        self.mass.player_queues.on_player_update(player, changed_values)
-
         if len(changed_values) == 0 and not force_update:
             return
 
-        self.mass.signal_event(EventType.PLAYER_UPDATED, object_id=player_id, data=player)
+        # signal update to the playerqueue
+        self.mass.player_queues.on_player_update(player, changed_values)
+
+        if changed_values != {"elapsed_time"} or force_update:
+            # ignore elapsed_time only changes
+            self.mass.signal_event(EventType.PLAYER_UPDATED, object_id=player_id, data=player)
 
         if skip_forward and not force_update:
             return
@@ -1226,9 +1227,7 @@ class PlayerController(CoreController):
                 player_id = player.player_id
                 # if the player is playing, update elapsed time every tick
                 # to ensure the queue has accurate details
-                player_playing = (
-                    player.active_source == player.player_id and player.state == PlayerState.PLAYING
-                )
+                player_playing = player.state == PlayerState.PLAYING
                 if player_playing:
                     self.mass.loop.call_soon(self.update, player_id)
                 # Poll player;
index 064767ade4f70083861d3442ba68895161bee9df..b3b5c6f06b383a0986e87c36d2ed90fca7ea10e5 100644 (file)
@@ -511,13 +511,6 @@ class PlayerGroupProvider(PlayerProvider):
         if 'needs_poll' is set to True in the player object.
         """
         if group_player := self.mass.players.get(player_id):
-            # dynamically change the poll interval
-            if group_player.state == PlayerState.PLAYING:
-                group_player.poll_interval = 5
-            elif group_player.powered:
-                group_player.poll_interval = 20
-            else:
-                group_player.poll_interval = 60
             self._update_attributes(group_player)
 
     async def create_group(self, group_type: str, name: str, members: list[str]) -> Player:
@@ -690,7 +683,7 @@ class PlayerGroupProvider(PlayerProvider):
             group_childs=set(members),
             active_source=group_player_id,
             needs_poll=True,
-            poll_interval=5,
+            poll_interval=30,
         )
 
         await self.mass.players.register_or_update(player)
index dcccfe4ecabfcc10ee8a0202f3c9871b2c1dcbe5..f78d2b9abd5c5b91f0819e42c3bd182900650cc2 100644 (file)
@@ -931,7 +931,7 @@ class SlimprotoProvider(PlayerProvider):
         fmt = request.query.get("fmt")
         child_player_id = request.query.get("child_player_id")
 
-        if not (player := self.mass.players.get(player_id)):
+        if not self.mass.players.get(player_id):
             raise web.HTTPNotFound(reason=f"Unknown player: {player_id}")
 
         if not (child_player := self.mass.players.get(child_player_id)):
@@ -955,8 +955,7 @@ class SlimprotoProvider(PlayerProvider):
 
         # all checks passed, start streaming!
         self.logger.debug(
-            "Start serving multi-client flow audio stream for player %s to %s",
-            player.display_name,
+            "Start serving multi-client flow audio stream to %s",
             child_player.display_name,
         )