fix group player auto power off
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 18 Sep 2020 12:27:49 +0000 (14:27 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 18 Sep 2020 12:27:49 +0000 (14:27 +0200)
music_assistant/constants.py
music_assistant/models/player_queue.py
music_assistant/player_manager.py

index 448f6f9d6138a520414ab35cc5600bf0547b238d..31a1a8b34fbc9c0cc82d22f9d7589956ad22756b 100755 (executable)
@@ -1,6 +1,6 @@
 """All constants for Music Assistant."""
 
-__version__ = "0.0.33"
+__version__ = "0.0.34"
 REQUIRED_PYTHON_VER = "3.7"
 
 CONF_USERNAME = "username"
index bf36b3712911fded97c42af7b85e24c3a69f02fd..da642fd4888b6e2942b0274f735d6f49f1ab5fed 100755 (executable)
@@ -503,7 +503,11 @@ class PlayerQueue:
             self._next_queue_startindex = self.next_index
             self._cur_index = new_index
         # check if a new track is loaded, wait for the streamdetails
-        if self._last_item != self.cur_item and self.cur_item.streamdetails:
+        if (
+            self.cur_item
+            and self._last_item != self.cur_item
+            and self.cur_item.streamdetails
+        ):
             # new active item in queue
             self.mass.signal_event(EVENT_QUEUE_UPDATED, self.to_dict())
             # invalidate previous streamdetails
index dc5b8386c7b16b8bcff3081a25d5bc5bead1cc4f..c1defb0c783b80d21f1571a68cc470e155343e6e 100755 (executable)
@@ -419,7 +419,7 @@ class PlayerManager:
             for child_player_id in player.group_childs:
                 child_player = self.get_player(child_player_id)
                 if child_player and child_player.powered:
-                    await self.async_cmd_power_off(child_player_id)
+                    self.mass.add_job(self.async_cmd_power_off(child_player_id))
         else:
             # if this was the last powered player in the group, turn off group
             for parent_player_id in player.group_parents:
@@ -433,9 +433,8 @@ class PlayerManager:
                     child_player = self.get_player(child_player_id)
                     if child_player and child_player.powered:
                         has_powered_players = True
-                        break
                 if not has_powered_players:
-                    await self.async_cmd_power_off(parent_player_id)
+                    self.mass.add_job(self.async_cmd_power_off(parent_player_id))
 
     async def async_cmd_power_toggle(self, player_id: str):
         """
@@ -561,8 +560,10 @@ class PlayerManager:
             player_state = Player(player.player_id, player.provider_id)
             self._players[player.player_id] = player_state
             setattr(player_state, "_on_update", self.__player_updated)
-        group_parents = self.__get_player_group_parents(player)
-        active_queue = self.__get_player_active_queue(player, group_parents)
+        player_state.group_parents = self.__get_player_group_parents(player)
+        active_queue = self.__get_player_active_queue(
+            player, player_state.group_parents
+        )
         player_state.name = self.__get_player_name(player)
         player_state.powered = self.__get_player_power_state(player)
         if active_queue != player.player_id: