some tweaks
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 9 Jul 2024 20:24:24 +0000 (22:24 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 9 Jul 2024 20:24:24 +0000 (22:24 +0200)
music_assistant/common/models/api.py
music_assistant/constants.py
music_assistant/server/controllers/config.py
music_assistant/server/controllers/metadata.py
music_assistant/server/providers/filesystem_local/base.py
music_assistant/server/server.py

index dfbfd66315c7c3377bd54b8a7c1cbc2a88bcf012..ee91666f222ea4470f482a27ffc650c48ab1fcf8 100644 (file)
@@ -58,6 +58,7 @@ class ServerInfoMessage(DataClassORJSONMixin):
     min_supported_schema_version: int
     base_url: str
     homeassistant_addon: bool = False
+    onboard_done: bool = False
 
 
 MessageType = (
index c949429e658efe8ed7fe08a8a7bce14b602fc8fb..8df52aeab66456600f2e9caa005f53b658ed4610 100644 (file)
@@ -65,6 +65,7 @@ CONF_ANNOUNCE_VOLUME_MAX: Final[str] = "announce_volume_max"
 CONF_ICON: Final[str] = "icon"
 CONF_LANGUAGE: Final[str] = "language"
 CONF_SAMPLE_RATES: Final[str] = "sample_rates"
+CONF_ONBOARD_DONE: Final[str] = "onboard_done"
 
 # config default values
 DEFAULT_HOST: Final[str] = "0.0.0.0"
index 85c457325fb7c25e8073cdc89b4d5c2c1495b406..9165e40b0a57797df0b71b2f72df5762f0d4018e 100644 (file)
@@ -30,6 +30,7 @@ from music_assistant.common.models.enums import EventType, PlayerState, Provider
 from music_assistant.common.models.errors import InvalidDataError, PlayerUnavailableError
 from music_assistant.constants import (
     CONF_CORE,
+    CONF_ONBOARD_DONE,
     CONF_PLAYERS,
     CONF_PROVIDERS,
     CONF_SERVER_ID,
@@ -73,6 +74,7 @@ class ConfigController:
         """Async initialize of controller."""
         await self._load()
         self.initialized = True
+        self.set_default(CONF_ONBOARD_DONE, len(self._data.get(CONF_PROVIDERS, {})) > 0)
         # 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)
@@ -83,6 +85,11 @@ class ConfigController:
         config_entries.DECRYPT_CALLBACK = self.decrypt_string
         LOGGER.debug("Started.")
 
+    @property
+    def onboard_done(self) -> bool:
+        """Return True if onboarding is done."""
+        return self.get(CONF_ONBOARD_DONE, False)
+
     async def close(self) -> None:
         """Handle logic on server stop."""
         if not self._timer_handle:
index b38b5ee16487f91ee3d3a3c30771c9ad48bbb65d..12cb75a203d82661267aced615cccc85b434dd40 100644 (file)
@@ -42,6 +42,10 @@ from music_assistant.common.models.media_items import (
 )
 from music_assistant.constants import (
     CONF_LANGUAGE,
+    DB_TABLE_ALBUMS,
+    DB_TABLE_ARTISTS,
+    DB_TABLE_PLAYLISTS,
+    DB_TABLE_TRACKS,
     VARIOUS_ARTISTS_ID_MBID,
     VARIOUS_ARTISTS_NAME,
     VERBOSE_LOG_LEVEL,
@@ -234,21 +238,36 @@ class MetaDataController(CoreController):
         try:
             timestamp = int(time() - 60 * 60 * 24 * 7)
             query = (
-                "WHERE json_extract(metadata,'$.last_refresh') ISNULL "
-                f"OR json_extract(metadata,'$.last_refresh') < {timestamp}"
+                f"WHERE json_extract({DB_TABLE_ARTISTS}.metadata,'$.last_refresh') ISNULL "
+                f"OR json_extract({DB_TABLE_ARTISTS}.metadata,'$.last_refresh') < {timestamp}"
             )
             for artist in await self.mass.music.artists.library_items(
                 limit=250, order_by="random", extra_query=query
             ):
                 await self._update_artist_metadata(artist)
+
+            query = (
+                f"WHERE json_extract({DB_TABLE_ALBUMS}.metadata,'$.last_refresh') ISNULL "
+                f"OR json_extract({DB_TABLE_ALBUMS}.metadata,'$.last_refresh') < {timestamp}"
+            )
             for album in await self.mass.music.albums.library_items(
                 limit=250, order_by="random", extra_query=query
             ):
                 await self._update_album_metadata(album)
+
+            query = (
+                f"WHERE json_extract({DB_TABLE_TRACKS}.metadata,'$.last_refresh') ISNULL "
+                f"OR json_extract({DB_TABLE_TRACKS}.metadata,'$.last_refresh') < {timestamp}"
+            )
             for track in await self.mass.music.tracks.library_items(
                 limit=50, order_by="random", extra_query=query
             ):
                 await self._update_track_metadata(track)
+
+            query = (
+                f"WHERE json_extract({DB_TABLE_PLAYLISTS}.metadata,'$.last_refresh') ISNULL "
+                f"OR json_extract({DB_TABLE_PLAYLISTS}.metadata,'$.last_refresh') < {timestamp}"
+            )
             for playlist in await self.mass.music.playlists.library_items(
                 limit=250, order_by="random", extra_query=query
             ):
index 0a0b6f3bce9e62a5a852013af22faf7829cbb150..221c30bf305894a44aec56dc5fc76c8f832e4583 100644 (file)
@@ -850,7 +850,8 @@ class FileSystemProviderBase(MusicProvider):
         explicit_tag = tags.get("itunesadvisory")
         if explicit_tag is not None:
             track.metadata.explicit = explicit_tag == "1"
-        track.mbid = tags.musicbrainz_recordingid
+        if tags.musicbrainz_recordingid:
+            track.mbid = tags.musicbrainz_recordingid
         track.metadata.chapters = UniqueList(tags.chapters)
         if album:
             if not album.mbid and tags.musicbrainz_albumid:
index 9d7223981c4735668b624918df7da48d1adeebc9..0b39b72c8e643bc97ff1e6d149642c8181cbcc0f 100644 (file)
@@ -204,6 +204,7 @@ class MusicAssistant:
             min_supported_schema_version=MIN_SCHEMA_VERSION,
             base_url=self.webserver.base_url,
             homeassistant_addon=self.running_as_hass_addon,
+            onboard_done=self.config.onboard_done,
         )
 
     @api_command("providers/manifests")