Fix cast players not available at startup (#2121)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 9 Apr 2025 08:31:33 +0000 (10:31 +0200)
committerGitHub <noreply@github.com>
Wed, 9 Apr 2025 08:31:33 +0000 (10:31 +0200)
* Fix for registering players at startup that are not yet available

* guard missing multichannel info in cast info

music_assistant/controllers/players.py
music_assistant/providers/chromecast/helpers.py

index 48efe1835af03e49fc8386cf9ed0f796416245f0..dcc798f6245ffc23e8acfba8153d7301a23bf89c 100644 (file)
@@ -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)
index 098062c2feba152d7dbb654b541e71f55db4fc95..97735e557a917a724b6674ee053c4b3c4e979633 100644 (file)
@@ -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)