From 7fb30f25290692dfe199c62b784f81300e032c6f Mon Sep 17 00:00:00 2001 From: Fabian Munkes <105975993+fmunkes@users.noreply.github.com> Date: Sat, 25 Oct 2025 15:15:33 +0200 Subject: [PATCH] MusicCast: Fix ungroup & discovery (#2545) --- music_assistant/providers/musiccast/player.py | 13 +++++++++++-- music_assistant/providers/musiccast/provider.py | 3 ++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/music_assistant/providers/musiccast/player.py b/music_assistant/providers/musiccast/player.py index 21388600..fab8ce5f 100644 --- a/music_assistant/providers/musiccast/player.py +++ b/music_assistant/providers/musiccast/player.py @@ -527,9 +527,18 @@ class MusicCastPlayer(Player): ) -> None: """Set multiple members. - If we are a server, this is called. - We can ignore removed devices, these are handled via ungroup individually. + This function is called on the server. """ + # Removing players + if player_ids_to_remove: + for player_id in player_ids_to_remove: + if player := self.mass.players.get(player_id): + assert isinstance(player, MusicCastPlayer) # for type checking + await player.ungroup() + + # Adding players + if not player_ids_to_add: + return children: set[str] = set() # set[ma_player_id] children_zones: list[str] = [] # list[ma_player_id] player_ids_to_add = [] if player_ids_to_add is None else player_ids_to_add diff --git a/music_assistant/providers/musiccast/provider.py b/music_assistant/providers/musiccast/provider.py index a2416d1e..632ae75c 100644 --- a/music_assistant/providers/musiccast/provider.py +++ b/music_assistant/providers/musiccast/provider.py @@ -126,14 +126,15 @@ class MusicCastProvider(PlayerProvider): device_info = await self.mass.http_session.get( f"http://{device_ip}/{MC_DEVICE_INFO_ENDPOINT}", raise_for_status=True ) + device_info_json = await device_info.json() except ClientError: # typical Errors are # ClientResponseError -> raise_for_status # ClientConnectorError -> unable to connect/ not existing/ timeout + # ContentTypeError -> device returns something, but is not json # but we can use the base exception class, as we only check # if the device is suitable return - device_info_json = await device_info.json() device_id = device_info_json.get("device_id") if device_id is None: return -- 2.34.1