Fix itemmapping album
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 20 Jul 2023 12:23:19 +0000 (14:23 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 20 Jul 2023 12:23:19 +0000 (14:23 +0200)
music_assistant/server/controllers/media/albums.py
music_assistant/server/controllers/media/base.py
music_assistant/server/controllers/media/tracks.py

index 2b06409030e20e2d5f7cd409bd72bfecd0450561..5d0ad30061259e30a5d692ba7f639dd0f2a9fcbd 100644 (file)
@@ -65,6 +65,7 @@ class AlbumsController(MediaControllerBase[Album]):
         lazy: bool = True,
         details: Album | ItemMapping = None,
         add_to_library: bool = False,
+        skip_metadata_lookup: bool = False,
     ) -> Album:
         """Return (full) details for a single media item."""
         album = await super().get(
@@ -74,6 +75,7 @@ class AlbumsController(MediaControllerBase[Album]):
             lazy=lazy,
             details=details,
             add_to_library=add_to_library,
+            skip_metadata_lookup=skip_metadata_lookup,
         )
         # append full artist details to full album item
         album.artists = [
index 216a344cecc86677dcb7ce093afd15e63dd04dc1..b084675357b58c99b5b2c10aefd0ce64907ce808 100644 (file)
@@ -138,6 +138,7 @@ class MediaControllerBase(Generic[ItemCls], metaclass=ABCMeta):
         lazy: bool = True,
         details: ItemCls = None,
         add_to_library: bool = False,
+        skip_metadata_lookup: bool = False,
     ) -> ItemCls:
         """Return (full) details for a single media item."""
         if provider_instance_id_or_domain == "database":
@@ -186,7 +187,12 @@ class MediaControllerBase(Generic[ItemCls], metaclass=ABCMeta):
         # only if we really need to wait for the result (e.g. to prevent race conditions),
         # we can set lazy to false and we await the job to complete.
         task_id = f"add_{self.media_type.value}.{details.provider}.{details.item_id}"
-        add_task = self.mass.create_task(self.add_item_to_library, item=details, task_id=task_id)
+        add_task = self.mass.create_task(
+            self.add_item_to_library,
+            item=details,
+            skip_metadata_lookup=skip_metadata_lookup,
+            task_id=task_id,
+        )
         if not lazy:
             await add_task
             return add_task.result()
index 26f5ab54a1886a9998403e9c5d1390462b27fdae..840d779e18c3577bb3efbd3524e97290ffc700b3 100644 (file)
@@ -56,6 +56,7 @@ class TracksController(MediaControllerBase[Track]):
         details: Track = None,
         album_uri: str | None = None,
         add_to_library: bool = False,
+        skip_metadata_lookup: bool = False,
     ) -> Track:
         """Return (full) details for a single media item."""
         track = await super().get(
@@ -65,6 +66,7 @@ class TracksController(MediaControllerBase[Track]):
             lazy=lazy,
             details=details,
             add_to_library=add_to_library,
+            skip_metadata_lookup=skip_metadata_lookup,
         )
         # append full album details to full track item
         try:
@@ -77,6 +79,7 @@ class TracksController(MediaControllerBase[Track]):
                     lazy=lazy,
                     details=None if isinstance(track.album, ItemMapping) else track.album,
                     add_to_library=add_to_library,
+                    skip_metadata_lookup=skip_metadata_lookup,
                 )
             elif provider_instance_id_or_domain == "library":
                 # grab the first album this track is attached to
@@ -102,6 +105,7 @@ class TracksController(MediaControllerBase[Track]):
                     lazy=lazy,
                     details=None if isinstance(artist, ItemMapping) else artist,
                     add_to_library=add_to_library,
+                    skip_metadata_lookup=skip_metadata_lookup,
                 )
             )
         track.artists = full_artists
@@ -395,13 +399,14 @@ class TracksController(MediaControllerBase[Track]):
         """Store AlbumTrack info."""
         if album.provider == "library":
             db_album = album
-        elif match := await self.mass.music.albums.get_library_item_by_prov_mappings(
-            album.provider_mappings
-        ):
-            db_album = match
         else:
-            db_album = await self.mass.music.albums.add_item_to_library(
-                album, skip_metadata_lookup=True
+            db_album = await self.mass.music.albums.get(
+                item_id=album.item_id,
+                provider_instance_id_or_domain=album.provider,
+                lazy=False,
+                details=album,
+                add_to_library=True,
+                skip_metadata_lookup=True,
             )
         album_mapping = {"track_id": db_id, "album_id": int(db_album.item_id)}
         if db_row := await self.mass.music.database.get_row(DB_TABLE_ALBUM_TRACKS, album_mapping):