From 5535de30a025d3a3842d9e50bd35ad6e40525e3c Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Wed, 9 Apr 2025 10:31:33 +0200 Subject: [PATCH] Fix cast players not available at startup (#2121) * Fix for registering players at startup that are not yet available * guard missing multichannel info in cast info --- music_assistant/controllers/players.py | 6 ++---- music_assistant/providers/chromecast/helpers.py | 4 +++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/music_assistant/controllers/players.py b/music_assistant/controllers/players.py index 48efe183..dcc798f6 100644 --- a/music_assistant/controllers/players.py +++ b/music_assistant/controllers/players.py @@ -934,9 +934,7 @@ class PlayerController(CoreController): player_id, player.provider, player.name, player.enabled_by_default ) # mark player as unavailable during the add process - if not player.available: - # this shouldn't happen, but let's guard it anyways - raise RuntimeError(f"Attempt to register an unavailable player: {player.name}") + player_available = player.available player.available = False player.enabled = self.mass.config.get(f"{CONF_PLAYERS}/{player_id}/enabled", True) @@ -960,7 +958,7 @@ class PlayerController(CoreController): player_id, player.display_name, ) - player.available = True + player.available = player_available self.mass.signal_event(EventType.PLAYER_ADDED, object_id=player.player_id, data=player) # always call update to fix special attributes like display name, group volume etc. self.update(player.player_id) diff --git a/music_assistant/providers/chromecast/helpers.py b/music_assistant/providers/chromecast/helpers.py index 098062c2..97735e55 100644 --- a/music_assistant/providers/chromecast/helpers.py +++ b/music_assistant/providers/chromecast/helpers.py @@ -107,10 +107,12 @@ def get_multizone_info(services: list[ServiceInfo], zconf: Zeroconf, timeout=30) if "multizone" in status and "groups" in status["multizone"]: for group in status["multizone"]["groups"]: + if "multichannel_group" not in group: + continue if group["multichannel_group"] and (udn := group.get("uuid")): uuid = UUID(udn.replace("-", "")) multichannel_groups.add(uuid) - except (urllib.error.HTTPError, urllib.error.URLError, OSError, ValueError): + except (urllib.error.HTTPError, urllib.error.URLError, OSError, KeyError, ValueError): pass return (dynamic_groups, multichannel_groups) -- 2.34.1