From e497583afd7331ceb54710f81efe6322a5d7472e Mon Sep 17 00:00:00 2001 From: Maxim Raznatovski Date: Fri, 8 Aug 2025 11:07:23 +0200 Subject: [PATCH] Fix player grouping (#2307) --- music_assistant/controllers/players.py | 2 +- music_assistant/providers/airplay/player.py | 2 +- music_assistant/providers/bluesound/player.py | 2 +- music_assistant/providers/musiccast/player.py | 2 +- music_assistant/providers/snapcast/player.py | 2 +- music_assistant/providers/sonos/player.py | 4 ++-- music_assistant/providers/sonos_s1/player.py | 2 +- music_assistant/providers/squeezelite/player.py | 2 +- music_assistant/providers/universal_group/player.py | 4 ++-- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/music_assistant/controllers/players.py b/music_assistant/controllers/players.py index 1473e7b8..efe09ebd 100644 --- a/music_assistant/controllers/players.py +++ b/music_assistant/controllers/players.py @@ -956,7 +956,7 @@ class PlayerController(CoreController): # check if player can be synced/grouped with the target player if not ( child_player_id in parent_player.can_group_with - or child_player.provider.instance_id in parent_player.can_group_with + or child_player.provider.lookup_key in parent_player.can_group_with or "*" in parent_player.can_group_with ): raise UnsupportedFeaturedException( diff --git a/music_assistant/providers/airplay/player.py b/music_assistant/providers/airplay/player.py index 868a6de0..be1eeab0 100644 --- a/music_assistant/providers/airplay/player.py +++ b/music_assistant/providers/airplay/player.py @@ -101,7 +101,7 @@ class AirPlayPlayer(Player): PlayerFeature.VOLUME_SET, } self._attr_volume_level = initial_volume - self._attr_can_group_with = {provider.instance_id} + self._attr_can_group_with = {provider.lookup_key} self._attr_enabled_by_default = not is_broken_raop_model(manufacturer, model) async def get_config_entries(self) -> list[ConfigEntry]: diff --git a/music_assistant/providers/bluesound/player.py b/music_assistant/providers/bluesound/player.py index e3cf08d2..b874c2fd 100644 --- a/music_assistant/providers/bluesound/player.py +++ b/music_assistant/providers/bluesound/player.py @@ -93,7 +93,7 @@ class BluesoundPlayer(Player): self._attr_available = True self._attr_needs_poll = True self._attr_poll_interval = 30 - self._attr_can_group_with = {provider.instance_id} + self._attr_can_group_with = {provider.lookup_key} async def setup(self) -> None: """Set up the player.""" diff --git a/music_assistant/providers/musiccast/player.py b/music_assistant/providers/musiccast/player.py index 1a06c857..6c2855f3 100644 --- a/music_assistant/providers/musiccast/player.py +++ b/music_assistant/providers/musiccast/player.py @@ -114,7 +114,7 @@ class MusicCastPlayer(Player): self._attr_name = self.zone_device.zone_data.name # group - self._attr_can_group_with = {self.provider.instance_id} + self._attr_can_group_with = {self.provider.lookup_key} self._attr_available = True diff --git a/music_assistant/providers/snapcast/player.py b/music_assistant/providers/snapcast/player.py index b4a1de5e..b4d81754 100644 --- a/music_assistant/providers/snapcast/player.py +++ b/music_assistant/providers/snapcast/player.py @@ -88,7 +88,7 @@ class SnapCastPlayer(Player): PlayerFeature.VOLUME_MUTE, PlayerFeature.PLAY_ANNOUNCEMENT, } - self._attr_can_group_with = {self.provider.instance_id} + self._attr_can_group_with = {self.provider.lookup_key} async def volume_set(self, volume_level: int) -> None: """Send VOLUME_SET command to given player.""" diff --git a/music_assistant/providers/sonos/player.py b/music_assistant/providers/sonos/player.py index 9a2081c7..a5d36311 100644 --- a/music_assistant/providers/sonos/player.py +++ b/music_assistant/providers/sonos/player.py @@ -143,7 +143,7 @@ class SonosPlayer(Player): ) self._attr_device_info.model = self.discovery_info["device"]["modelDisplayName"] self._attr_device_info.manufacturer = self._provider.manifest.name - self._attr_can_group_with = {self._provider.instance_id} + self._attr_can_group_with = {self._provider.lookup_key} if SonosCapability.LINE_IN in self.discovery_info["device"]["capabilities"]: self._attr_source_list.append(PLAYER_SOURCE_MAP[SOURCE_LINE_IN]) @@ -582,7 +582,7 @@ class SonosPlayer(Player): if x.player_id != airplay_player.player_id ) else: - self._attr_can_group_with = {self._provider.instance_id} + self._attr_can_group_with = {self._provider.lookup_key} else: # player is group child (synced to another player) group_parent: SonosPlayer = self.mass.players.get( diff --git a/music_assistant/providers/sonos_s1/player.py b/music_assistant/providers/sonos_s1/player.py index 2a070cd6..8debf925 100644 --- a/music_assistant/providers/sonos_s1/player.py +++ b/music_assistant/providers/sonos_s1/player.py @@ -99,7 +99,7 @@ class SonosPlayer(Player): ip_address=soco.ip_address, ) self._attr_available = True - self._attr_can_group_with = {provider.instance_id} + self._attr_can_group_with = {provider.lookup_key} # Cached attributes self.crossfade: bool = False diff --git a/music_assistant/providers/squeezelite/player.py b/music_assistant/providers/squeezelite/player.py index df123888..67a39a4a 100644 --- a/music_assistant/providers/squeezelite/player.py +++ b/music_assistant/providers/squeezelite/player.py @@ -106,7 +106,7 @@ class SqueezelitePlayer(Player): ip_address=client.device_address, manufacturer=client.device_type, ) - self._attr_can_group_with = {provider.instance_id} + self._attr_can_group_with = {provider.lookup_key} async def setup(self) -> None: """Set up the player.""" diff --git a/music_assistant/providers/universal_group/player.py b/music_assistant/providers/universal_group/player.py index d0df12c5..ad9d2920 100644 --- a/music_assistant/providers/universal_group/player.py +++ b/music_assistant/providers/universal_group/player.py @@ -73,9 +73,9 @@ class UniversalGroupPlayer(GroupPlayer): ) # allow grouping with all providers, except the ugp provider itself self._attr_can_group_with = { - x.instance_id + x.lookup_key for x in self.mass.players.providers - if x.instance_id != self.provider.instance_id + if x.lookup_key != self.provider.lookup_key } self._set_attributes() -- 2.34.1