From: Marcel van der Veldt Date: Sat, 3 Feb 2024 17:59:43 +0000 (+0100) Subject: Fix empty players list in config (#1062) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=e00d99e46a328cc49dc1e9251a9f985ac9aed69a;p=music-assistant-server.git Fix empty players list in config (#1062) ensure instance id for player provider --- diff --git a/music_assistant/server/controllers/config.py b/music_assistant/server/controllers/config.py index dc7b26c0..8b21c74b 100644 --- a/music_assistant/server/controllers/config.py +++ b/music_assistant/server/controllers/config.py @@ -71,15 +71,6 @@ class ConfigController: """Async initialize of controller.""" await self._load() self.initialized = True - #### temp fix issue introduced in b89 ########## - # TODO: remove after b92 - final_player_configs = {} - for player_id, player_conf in self.get(CONF_PLAYERS, {}).items(): - if "provider" in player_conf: - final_player_configs[player_id] = player_conf - self.set(CONF_PLAYERS, final_player_configs) - #### end of temp fix ############################ - # create default server ID if needed (also used for encrypting passwords) self.set_default(CONF_SERVER_ID, uuid4().hex) server_id: str = self.get(CONF_SERVER_ID) @@ -88,7 +79,6 @@ class ConfigController: self._fernet = Fernet(fernet_key) config_entries.ENCRYPT_CALLBACK = self.encrypt_string config_entries.DECRYPT_CALLBACK = self.decrypt_string - LOGGER.debug("Started.") async def close(self) -> None: @@ -322,11 +312,13 @@ class ConfigController: async def get_player_configs(self, provider: str | None = None) -> list[PlayerConfig]: """Return all known player configurations, optionally filtered by provider domain.""" available_providers = {x.instance_id for x in self.mass.providers} + # add both domain and instance id + available_providers.update({x.domain for x in self.mass.providers}) return [ - await self.get_player_config(player_id) - for player_id, raw_conf in self.get(CONF_PLAYERS, {}).items() + await self.get_player_config(raw_conf["player_id"]) + for raw_conf in list(self.get(CONF_PLAYERS, {}).values()) # filter out unavailable providers - if raw_conf["provider"] in available_providers + if self.mass.get_provider(raw_conf["provider"]) # optional provider filter and (provider in (None, raw_conf["provider"])) ] diff --git a/music_assistant/server/controllers/players.py b/music_assistant/server/controllers/players.py index aa30cb58..7feb2088 100755 --- a/music_assistant/server/controllers/players.py +++ b/music_assistant/server/controllers/players.py @@ -719,7 +719,7 @@ class PlayerController(CoreController): return await player_prov.create_group(name, members=members) if ProviderFeature.SYNC_PLAYERS in player_prov.supported_features: # default syncgroup implementation - return await self._create_syncgroup(provider, name, members) + return await self._create_syncgroup(player_prov.instance_id, name, members) raise UnsupportedFeaturedException( f"Provider {player_prov.name} does not support creating groups" ) diff --git a/music_assistant/server/providers/airplay/__init__.py b/music_assistant/server/providers/airplay/__init__.py index 10eca9ff..5d2701f3 100644 --- a/music_assistant/server/providers/airplay/__init__.py +++ b/music_assistant/server/providers/airplay/__init__.py @@ -284,7 +284,7 @@ class AirplayProvider(PlayerProvider): async def _handle_player_register_callback(self, player: Player) -> None: """Handle player register callback from slimproto source player.""" # TODO: Can we get better device info from mDNS ? - player.provider = self.domain + player.provider = self.instance_id player.device_info = DeviceInfo( model="Airplay device", address=player.device_info.address, diff --git a/music_assistant/server/providers/chromecast/__init__.py b/music_assistant/server/providers/chromecast/__init__.py index 1bb7e826..491e8aaa 100644 --- a/music_assistant/server/providers/chromecast/__init__.py +++ b/music_assistant/server/providers/chromecast/__init__.py @@ -426,7 +426,7 @@ class ChromecastProvider(PlayerProvider): ), player=Player( player_id=player_id, - provider=self.domain, + provider=self.instance_id, type=PlayerType.GROUP if cast_info.is_audio_group else PlayerType.PLAYER, name=cast_info.friendly_name, available=False, diff --git a/music_assistant/server/providers/dlna/__init__.py b/music_assistant/server/providers/dlna/__init__.py index 53efeb7a..ced3fc2c 100644 --- a/music_assistant/server/providers/dlna/__init__.py +++ b/music_assistant/server/providers/dlna/__init__.py @@ -584,7 +584,7 @@ class DLNAPlayerProvider(PlayerProvider): udn=udn, player=Player( player_id=udn, - provider=self.domain, + provider=self.instance_id, type=PlayerType.PLAYER, name=udn, available=False, diff --git a/music_assistant/server/providers/slimproto/__init__.py b/music_assistant/server/providers/slimproto/__init__.py index 48218794..e3b65d97 100644 --- a/music_assistant/server/providers/slimproto/__init__.py +++ b/music_assistant/server/providers/slimproto/__init__.py @@ -614,7 +614,7 @@ class SlimprotoProvider(PlayerProvider): # player does not yet exist, create it player = Player( player_id=player_id, - provider=self.domain, + provider=self.instance_id, type=PlayerType.PLAYER, name=client.name, available=True, diff --git a/music_assistant/server/providers/snapcast/__init__.py b/music_assistant/server/providers/snapcast/__init__.py index fcd2f31a..489692d5 100644 --- a/music_assistant/server/providers/snapcast/__init__.py +++ b/music_assistant/server/providers/snapcast/__init__.py @@ -150,7 +150,7 @@ class SnapCastProvider(PlayerProvider): snap_client = cast(Snapclient, self._snapserver.client(player_id)) player = Player( player_id=player_id, - provider=self.domain, + provider=self.instance_id, type=PlayerType.PLAYER, name=snap_client.friendly_name, available=True, diff --git a/music_assistant/server/providers/sonos/__init__.py b/music_assistant/server/providers/sonos/__init__.py index 341d4847..5fa2aa6c 100644 --- a/music_assistant/server/providers/sonos/__init__.py +++ b/music_assistant/server/providers/sonos/__init__.py @@ -505,7 +505,7 @@ class SonosPlayerProvider(PlayerProvider): if not (mass_player := self.mass.players.get(soco.uid)): mass_player = Player( player_id=soco.uid, - provider=self.domain, + provider=self.instance_id, type=PlayerType.PLAYER, name=soco.player_name, available=True, diff --git a/music_assistant/server/providers/sonos/player.py b/music_assistant/server/providers/sonos/player.py index fb9aea0e..2a1b2893 100644 --- a/music_assistant/server/providers/sonos/player.py +++ b/music_assistant/server/providers/sonos/player.py @@ -115,7 +115,7 @@ class SonosPlayer: self.mass = sonos_prov.mass self.player_id = soco.uid self.soco = soco - self.logger = sonos_prov.logger.getChild(soco.uid) + self.logger = sonos_prov.logger self.household_id: str = soco.household_id self.subscriptions: list[SubscriptionBase] = [] self.websocket: SonosWebsocket | None = None