Fix onboard done logic
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 26 Feb 2025 09:56:47 +0000 (10:56 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 26 Feb 2025 09:56:47 +0000 (10:56 +0100)
music_assistant/constants.py
music_assistant/controllers/config.py
music_assistant/mass.py

index 09367092e823a827c01715d9b79f1705e79ecd94..a11eb2c2aff38ee29891840d2c5f0dc91f72cab1 100644 (file)
@@ -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"
index 2e9ca08784f54ae9b08939b2c6d486e5ad1ca7cc..9edac8962a2c4bc49247c60a92c1f96c9e161eeb 100644 (file)
@@ -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()
index 31813093e242a88eca6bc39f1f0cf9ea59012a54..f51d9188b256222e17e73a25e76024b9e7f357d7 100644 (file)
@@ -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