sync tweaks
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 24 Oct 2024 13:04:26 +0000 (15:04 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 24 Oct 2024 13:04:26 +0000 (15:04 +0200)
music_assistant/server/controllers/players.py
music_assistant/server/providers/player_group/__init__.py
music_assistant/server/providers/slimproto/__init__.py

index fd454fe2156f0ae07a16fb74916d804b3143eacc..0d7e94c1e435d1e0c0e7d66e16b6afe5a08ba14f 100644 (file)
@@ -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:
index b442ed3cb51a58148ceaffb8399535b5a1744000..4fa9cef0b5caea58f7ee794290530559ee353a1d 100644 (file)
@@ -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)
index 4d62cd9c3a0a7ae61835d0e1d027ee0b559356c2..dcccfe4ecabfcc10ee8a0202f3c9871b2c1dcbe5 100644 (file)
@@ -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()