From: Marcel van der Veldt Date: Thu, 24 Oct 2024 13:04:26 +0000 (+0200) Subject: sync tweaks X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=7211fae04b36a36e2b817bbfc2a9f3f9be55e4f5;p=music-assistant-server.git sync tweaks --- diff --git a/music_assistant/server/controllers/players.py b/music_assistant/server/controllers/players.py index fd454fe2..0d7e94c1 100644 --- a/music_assistant/server/controllers/players.py +++ b/music_assistant/server/controllers/players.py @@ -689,9 +689,10 @@ class PlayerController(CoreController): 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 b442ed3c..4fa9cef0 100644 --- a/music_assistant/server/providers/player_group/__init__.py +++ b/music_assistant/server/providers/player_group/__init__.py @@ -743,7 +743,10 @@ class PlayerGroupProvider(PlayerProvider): 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 4d62cd9c..dcccfe4e 100644 --- a/music_assistant/server/providers/slimproto/__init__.py +++ b/music_assistant/server/providers/slimproto/__init__.py @@ -579,7 +579,8 @@ class SlimprotoProvider(PlayerProvider): 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()