some small tweaks and typos fixed
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 18 Oct 2024 23:43:08 +0000 (01:43 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 18 Oct 2024 23:43:08 +0000 (01:43 +0200)
music_assistant/server/providers/player_group/__init__.py

index 58ce7f7275e2a492ff2179b0899f902baa33854d..8360af365c75ba5279426bf93f46fa16c3878e9a 100644 (file)
@@ -601,6 +601,7 @@ class PlayerGroupProvider(PlayerProvider):
             await player_provider.cmd_unsync(child_player.player_id)
             child_player.active_group = None
             child_player.active_source = None
+        group_player.group_childs = {x for x in group_player.group_childs if x != player_id}
         if is_sync_leader and was_playing:
             # unsyncing the sync leader will stop the group so we need to resume
             self.mass.call_later(2, self.mass.players.cmd_play, group_player.player_id)
@@ -693,6 +694,14 @@ class PlayerGroupProvider(PlayerProvider):
         ):
             if child_player.group_childs:
                 return child_player
+        # Return the (first/only) player
+        # this is to handle the edge case where players are not
+        # yet synced or there simply is just one player
+        for child_player in self.mass.players.iter_group_members(
+            group_player, only_powered=False, only_playing=False, active_only=False
+        ):
+            if not child_player.synced_to:
+                return child_player
         return None
 
     def _select_sync_leader(self, group_player: Player) -> Player | None: