fixes for local images
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 19 Apr 2024 09:37:53 +0000 (11:37 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 19 Apr 2024 09:37:53 +0000 (11:37 +0200)
music_assistant/common/models/media_items.py
music_assistant/server/controllers/media/tracks.py
music_assistant/server/controllers/metadata.py

index 67a35c5912dda3fd2c841e7d624318c396a8bd6a..25fe0a95e73d6f4714c4f5a3f28bde96a13c8595 100644 (file)
@@ -183,6 +183,7 @@ class MediaItemMetadata(DataClassDictMixin):
     description: str | None = None
     review: str | None = None
     explicit: bool | None = None
+    # NOTE: images is a list of available images, sorted by preference
     images: list[MediaItemImage] | None = None
     genres: set[str] | None = None
     mood: str | None = None
@@ -203,7 +204,7 @@ class MediaItemMetadata(DataClassDictMixin):
     def update(
         self,
         new_values: MediaItemMetadata,
-        allow_overwrite: bool = True,
+        allow_overwrite: bool = False,
     ) -> MediaItemMetadata:
         """Update metadata (in-place) with new values."""
         if not new_values:
index a6a9e9283c5e40ce32fa44a51aebe47b70f96b80..9078abfec7e08a72f590a34477dcf7db3a324e72 100644 (file)
@@ -143,13 +143,7 @@ class TracksController(MediaControllerBase[Track]):
         except MusicAssistantError as err:
             # edge case where playlist track has invalid albumdetails
             self.logger.warning("Unable to fetch album details %s - %s", track.album.uri, str(err))
-        # prefer album image if album explicitly given or track has no image on its own
-        if (
-            (album_uri or not track.metadata.images)
-            and isinstance(track.album, Album)
-            and track.album.image
-        ):
-            track.metadata.images = [track.album.image]
+
         # append artist details to full track item (resolve ItemMappings)
         track_artists = []
         for artist in track.artists:
@@ -187,18 +181,14 @@ class TracksController(MediaControllerBase[Track]):
         # grab additional metadata
         if metadata_lookup:
             await self.mass.metadata.get_track_metadata(item)
-        # copy track image from album (only if albumtype = single)
+        # copy track image from album (only if albumtype = single !)
         if (
             not item.image
             and isinstance(item.album, Album)
             and item.album.image
             and item.album.album_type == AlbumType.SINGLE
         ):
-            item.metadata.images = item.album.metadata.images
-        elif item.image and isinstance(item.album, Album) and item.image == item.album.image:
-            item.metadata.images = []
-        if item.image and isinstance(item.album, Album) and not item.album.image:
-            item.album.metadata.images = item.metadata.images
+            item.metadata.images = [item.album.image]
         # check for existing item first
         library_item = None
         if cur_item := await self.get_library_item_by_prov_id(item.item_id, item.provider):
index 81bd4dac4482dfbdbdc5901ecdc1216b41b07e6b..aae513a7a58be6d345d949c805a624202fbdc4c5 100644 (file)
@@ -235,7 +235,7 @@ class MetaDataController(CoreController):
             if ProviderFeature.ARTIST_METADATA not in provider.supported_features:
                 continue
             if metadata := await provider.get_artist_metadata(artist):
-                artist.metadata.update(metadata)
+                artist.metadata.update(metadata, allow_overwrite=False)
                 self.logger.debug(
                     "Fetched metadata for Artist %s on provider %s",
                     artist.name,
@@ -254,7 +254,7 @@ class MetaDataController(CoreController):
             if ProviderFeature.ALBUM_METADATA not in provider.supported_features:
                 continue
             if metadata := await provider.get_album_metadata(album):
-                album.metadata.update(metadata)
+                album.metadata.update(metadata, allow_overwrite=False)
                 self.logger.debug(
                     "Fetched metadata for Album %s on provider %s",
                     album.name,
@@ -272,7 +272,7 @@ class MetaDataController(CoreController):
             if ProviderFeature.TRACK_METADATA not in provider.supported_features:
                 continue
             if metadata := await provider.get_track_metadata(track):
-                track.metadata.update(metadata)
+                track.metadata.update(metadata, allow_overwrite=False)
                 self.logger.debug(
                     "Fetched metadata for Track %s on provider %s",
                     track.name,