From 7211fae04b36a36e2b817bbfc2a9f3f9be55e4f5 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Thu, 24 Oct 2024 15:04:26 +0200 Subject: [PATCH] sync tweaks --- music_assistant/server/controllers/players.py | 3 ++- music_assistant/server/providers/player_group/__init__.py | 5 ++++- music_assistant/server/providers/slimproto/__init__.py | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/music_assistant/server/controllers/players.py b/music_assistant/server/controllers/players.py index fd454fe21..0d7e94c1e 100644 --- a/music_assistant/server/controllers/players.py +++ b/music_assistant/server/controllers/players.py @@ -689,9 +689,10 @@ async def cmd_sync_many(self, target_player: str, child_player_ids: list[str]) - async with self._player_throttlers[target_player]: try: await player_provider.cmd_sync_many(target_player, final_player_ids) - finally: + except Exception: # restore sync state if the command failed parent_player.group_childs = prev_group_childs + raise @api_command("players/cmd/unsync_many") async def cmd_unsync_many(self, player_ids: list[str]) -> None: diff --git a/music_assistant/server/providers/player_group/__init__.py b/music_assistant/server/providers/player_group/__init__.py index b442ed3cb..4fa9cef0b 100644 --- a/music_assistant/server/providers/player_group/__init__.py +++ b/music_assistant/server/providers/player_group/__init__.py @@ -743,7 +743,10 @@ async def _sync_syncgroup(self, group_player: Player) -> None: if sync_leader.player_id == member.player_id: # skip sync leader continue - if member.synced_to == sync_leader.player_id: + if ( + member.synced_to == sync_leader.player_id + and member.player_id in sync_leader.group_childs + ): # already synced continue members_to_sync.append(member.player_id) diff --git a/music_assistant/server/providers/slimproto/__init__.py b/music_assistant/server/providers/slimproto/__init__.py index 4d62cd9c3..dcccfe4ec 100644 --- a/music_assistant/server/providers/slimproto/__init__.py +++ b/music_assistant/server/providers/slimproto/__init__.py @@ -579,7 +579,8 @@ async def cmd_unsync(self, player_id: str) -> None: player = self.mass.players.get(player_id, raise_unavailable=True) if player.synced_to: group_leader = self.mass.players.get(player.synced_to, raise_unavailable=True) - group_leader.group_childs.remove(player_id) + if player_id in group_leader.group_childs: + group_leader.group_childs.remove(player_id) player.synced_to = None if slimclient := self.slimproto.get_player(player_id): await slimclient.stop()