From d584144323bf62eb1a1f1f45b930031cf460a056 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Wed, 26 Feb 2025 10:56:47 +0100 Subject: [PATCH] Fix onboard done logic --- music_assistant/constants.py | 1 + music_assistant/controllers/config.py | 14 +++++++++++++- music_assistant/mass.py | 4 ++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/music_assistant/constants.py b/music_assistant/constants.py index 09367092..a11eb2c2 100644 --- a/music_assistant/constants.py +++ b/music_assistant/constants.py @@ -35,6 +35,7 @@ MASS_LOGO: Final[str] = str(RESOURCES_DIR.joinpath("logo.png")) # config keys +CONF_ONBOARD_DONE: Final[str] = "onboard_done" CONF_SERVER_ID: Final[str] = "server_id" CONF_IP_ADDRESS: Final[str] = "ip_address" CONF_PORT: Final[str] = "port" diff --git a/music_assistant/controllers/config.py b/music_assistant/controllers/config.py index 2e9ca087..9edac896 100644 --- a/music_assistant/controllers/config.py +++ b/music_assistant/controllers/config.py @@ -37,6 +37,7 @@ from music_assistant.constants import ( CONF_DEPRECATED_EQ_BASS, CONF_DEPRECATED_EQ_MID, CONF_DEPRECATED_EQ_TREBLE, + CONF_ONBOARD_DONE, CONF_PLAYER_DSP, CONF_PLAYERS, CONF_PROVIDERS, @@ -97,7 +98,7 @@ class ConfigController: @property def onboard_done(self) -> bool: """Return True if onboarding is done.""" - return len(self._data.get(CONF_PROVIDERS, {})) > 0 + return self.get(CONF_ONBOARD_DONE, False) async def close(self) -> None: """Handle logic on server stop.""" @@ -276,6 +277,9 @@ class ConfigController: config = await self._update_provider_config(instance_id, values) else: config = await self._add_provider_config(provider_domain, values) + # mark onboard done whenever the (first) provider is added + # this will be replaced later by a more sophisticated onboarding process + self.set(CONF_ONBOARD_DONE, True) # return full config, just in case return await self.get_provider_config(config.instance_id) @@ -816,6 +820,14 @@ class ConfigController: for x in sample_rates ] changed = True + # set 'onboard_done' flag if we have any (non default) provider configs + if not self._data.get(CONF_ONBOARD_DONE): + default_providers = {x.domain for x in self.mass.get_provider_manifests() if x.builtin} + for provider_config in self._data.get(CONF_PROVIDERS, {}).values(): + if provider_config["domain"] not in default_providers: + self.set(CONF_ONBOARD_DONE, True) + changed = True + break if changed: await self._async_save() diff --git a/music_assistant/mass.py b/music_assistant/mass.py index 31813093..f51d9188 100644 --- a/music_assistant/mass.py +++ b/music_assistant/mass.py @@ -139,6 +139,8 @@ class MusicAssistant: limit_per_host=100, ), ) + # load all available providers from manifest files + await self.__load_provider_manifests() # setup config controller first and fetch important config values self.config = ConfigController(self) await self.config.setup() @@ -174,8 +176,6 @@ class MusicAssistant: # not yet available while we're starting (or performing migrations) self._register_api_commands() await self.webserver.setup(await self.config.get_core_config("webserver")) - # load all available providers from manifest files - await self.__load_provider_manifests() # setup discovery await self._setup_discovery() # load providers -- 2.34.1