From c3f8dfc8a252739473736083a4a424e45984be1e Mon Sep 17 00:00:00 2001 From: Maxim Raznatovski Date: Fri, 8 Aug 2025 11:32:02 +0200 Subject: [PATCH] Fix broken state updates for SnapCast (#2305) --- music_assistant/providers/snapcast/provider.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/music_assistant/providers/snapcast/provider.py b/music_assistant/providers/snapcast/provider.py index c1c14137..736b5ce9 100644 --- a/music_assistant/providers/snapcast/provider.py +++ b/music_assistant/providers/snapcast/provider.py @@ -227,7 +227,7 @@ class SnapCastProvider(PlayerProvider): else: return self._get_ma_id(snap_client_id) - def _handle_player_init(self, snap_client: Snapclient) -> None: + def _handle_player_init(self, snap_client: Snapclient) -> SnapCastPlayer: """Process Snapcast add to Player controller.""" player_id = self._generate_and_register_id(snap_client.identifier) player = self.mass.players.get(player_id, raise_unavailable=False) @@ -242,9 +242,12 @@ class SnapCastProvider(PlayerProvider): snap_client_id=self._get_snapclient_id(player_id), ) player.setup() + else: + player = cast("SnapCastPlayer", player) # for type checking asyncio.run_coroutine_threadsafe( self.mass.players.register_or_update(player), loop=self.mass.loop ) + return player def _handle_update(self) -> None: """Process Snapcast init Player/Group and set callback .""" @@ -254,9 +257,7 @@ class SnapCastProvider(PlayerProvider): "Detected Snapclient %s without identifier, skipping", snap_client.friendly_name ) continue - self._handle_player_init(snap_client) - if ma_player := self.mass.players.get(self._get_ma_id(snap_client.identifier)): - assert isinstance(ma_player, SnapCastPlayer) # for type checking + if ma_player := self._handle_player_init(snap_client): snap_client.set_callback(ma_player._handle_player_update) for snap_client in self._snapserver.clients: if ma_player := self.mass.players.get(self._get_ma_id(snap_client.identifier)): -- 2.34.1