From: Marcel van der Veldt Date: Mon, 23 Feb 2026 19:26:27 +0000 (+0100) Subject: Fix static members of sync group X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=711697a3f80c1da9684f2ad3acb23e525d5d2493;p=music-assistant-server.git Fix static members of sync group --- diff --git a/music_assistant/providers/sync_group/player.py b/music_assistant/providers/sync_group/player.py index e14056bc..f5d441b0 100644 --- a/music_assistant/providers/sync_group/player.py +++ b/music_assistant/providers/sync_group/player.py @@ -59,14 +59,13 @@ class SyncGroupPlayer(Player): """Handle logic when the PlayerConfig is first loaded or updated.""" # Config is only available after the player was registered self._cache.clear() # clear to prevent loading old is_dynamic - default_members = cast("list[str]", self.config.get_value(CONF_GROUP_MEMBERS, [])) + static_members = cast("list[str]", self.config.get_value(CONF_GROUP_MEMBERS, [])) + self._attr_static_group_members = static_members.copy() if self.is_dynamic: - self._attr_static_group_members = [] self._attr_supported_features.add(PlayerFeature.SET_MEMBERS) else: - self._attr_static_group_members = default_members.copy() self._attr_supported_features.discard(PlayerFeature.SET_MEMBERS) - self._attr_group_members = default_members.copy() + self._attr_group_members = static_members.copy() @cached_property def supported_features(self) -> set[PlayerFeature]: @@ -117,13 +116,12 @@ class SyncGroupPlayer(Player): # if we already have a sync leader, we use its can_group_with as reference if self.sync_leader: return {self.sync_leader.player_id, *self.sync_leader.state.can_group_with} - # If we have no members, but we do have default members in the config, - # we can group with players that are compatible with those - default_members = cast("list[str]", self.config.get_value(CONF_GROUP_MEMBERS, [])) - for member_id in default_members: + # If we have no syncleader, but we do have group members + # grab 'can_group_with' from the first available member + for member_id in self._attr_group_members: member_player = self.mass.players.get_player(member_id) if member_player and member_player.state.available: - return {*default_members, *member_player.state.can_group_with} + return {*self._attr_group_members, *member_player.state.can_group_with} # Dynamic groups can potentially group with any compatible players # Actual compatibility is validated when adding members temp_can_group_with = set() @@ -335,8 +333,7 @@ class SyncGroupPlayer(Player): if self.group_members and self.sync_leader and self.sync_leader.state.available: # current leader is still available, no need to select a new one return self.sync_leader - default_members = cast("list[str]", self.config.get_value(CONF_GROUP_MEMBERS, [])) - group_members = self.group_members or default_members or new_members or [] + group_members = self.group_members or new_members or [] for member_id in group_members: member_player = self.mass.players.get_player(member_id) if member_player and member_player.state.available: