await player poll
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Sun, 2 Apr 2023 16:28:45 +0000 (18:28 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Sun, 2 Apr 2023 16:28:45 +0000 (18:28 +0200)
music_assistant/server/controllers/players.py

index 8a48608141255dbfeb76f39391b51fdd334fa132..cdeb0a31401e11e6830d264c5a210bc904ccb5cb 100755 (executable)
@@ -521,41 +521,38 @@ class PlayerController:
         count = 0
         while True:
             count += 1
-            async with asyncio.TaskGroup() as tg:
-                for player in list(self._players.values()):
-                    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_queue == player.player_id
-                        and player.state == PlayerState.PLAYING
-                    )
-                    if player_playing:
+            for player in list(self._players.values()):
+                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_queue == player.player_id and player.state == PlayerState.PLAYING
+                )
+                if player_playing:
+                    self.mass.loop.call_soon(self.update, player_id)
+                # Poll player;
+                # - every 360 seconds if the player if not powered
+                # - every 30 seconds if the player is powered
+                # - every 10 seconds if the player is playing
+                if (
+                    (player.available and player.powered and count % 30 == 0)
+                    or (player.available and player_playing and count % 10 == 0)
+                    or count == 360
+                ) and (player_prov := self.get_player_provider(player_id)):
+                    try:
+                        await player_prov.poll_player(player_id)
+                    except PlayerUnavailableError:
+                        player.available = False
+                        player.state = PlayerState.IDLE
+                        player.powered = False
                         self.mass.loop.call_soon(self.update, player_id)
-                    # Poll player;
-                    # - every 360 seconds if the player if not powered
-                    # - every 30 seconds if the player is powered
-                    # - every 10 seconds if the player is playing
-                    if (
-                        (player.available and player.powered and count % 30 == 0)
-                        or (player.available and player_playing and count % 10 == 0)
-                        or count == 360
-                    ):
-                        if player_prov := self.get_player_provider(player_id):
-                            try:
-                                tg.create_task(player_prov.poll_player(player_id))
-                            except PlayerUnavailableError:
-                                player.available = False
-                                player.state = PlayerState.IDLE
-                                player.powered = False
-                                self.mass.loop.call_soon(self.update, player_id)
-                            except Exception as err:  # pylint: disable=broad-except
-                                LOGGER.warning(
-                                    "Error while requesting latest state from player %s: %s",
-                                    player.display_name,
-                                    str(err),
-                                    exc_info=err,
-                                )
-                        if count >= 360:
-                            count = 0
+                    except Exception as err:  # pylint: disable=broad-except
+                        LOGGER.warning(
+                            "Error while requesting latest state from player %s: %s",
+                            player.display_name,
+                            str(err),
+                            exc_info=err,
+                        )
+                    if count >= 360:
+                        count = 0
             await asyncio.sleep(1)