Fix (album) images for track listings (#1586)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 21 Aug 2024 07:46:46 +0000 (09:46 +0200)
committerGitHub <noreply@github.com>
Wed, 21 Aug 2024 07:46:46 +0000 (09:46 +0200)
music_assistant/server/controllers/media/base.py
music_assistant/server/controllers/media/tracks.py

index adde2733a49ebe796d2830ed86919ba29efcb964..17f984a5eac50ea13a050c649dd828a1192b3d1a 100644 (file)
@@ -36,7 +36,7 @@ if TYPE_CHECKING:
 
 ItemCls = TypeVar("ItemCls", bound="MediaItemType")
 
-JSON_KEYS = ("artists", "album", "metadata", "provider_mappings", "external_ids", "albums")
+JSON_KEYS = ("artists", "track_album", "metadata", "provider_mappings", "external_ids")
 
 SORT_KEYS = {
     "name": "name COLLATE NOCASE ASC",
@@ -815,13 +815,14 @@ class MediaControllerBase(Generic[ItemCls], metaclass=ABCMeta):
                 continue
             db_row_dict[key] = json_loads(raw_value)
 
-        # copy albums --> album
-        if albums := db_row_dict.get("albums"):
-            db_row_dict["album"] = albums[0]
-            db_row_dict["disc_number"] = albums[0]["disc_number"]
-            db_row_dict["track_number"] = albums[0]["disc_number"]
-
-        # copy album image to itemmapping single image
-        if (album := db_row_dict.get("album")) and (images := album.get("images")):
-            db_row_dict["album"]["image"] = next((x for x in images if x["type"] == "thumb"), None)
+        # copy track_album --> album
+        if track_album := db_row_dict.get("track_album"):
+            db_row_dict["album"] = track_album
+            db_row_dict["disc_number"] = track_album["disc_number"]
+            db_row_dict["track_number"] = track_album["disc_number"]
+            # copy album image to itemmapping single image
+            if images := track_album.get("images"):
+                db_row_dict["album"]["image"] = next(
+                    (x for x in images if x["type"] == "thumb"), None
+                )
         return db_row_dict
index 257de4e845c550fd0f25fc45885f4b41e73f6b8a..16e59b0c45a70cace75c6225e58ed565bc95240c 100644 (file)
@@ -72,7 +72,7 @@ class TracksController(MediaControllerBase[Track]):
                     'sort_name', artists.sort_name,
                     'media_type', 'artist'
                 )) FROM artists JOIN track_artists on track_artists.track_id = tracks.item_id  WHERE artists.item_id = track_artists.artist_id) AS artists,
-            (SELECT JSON_GROUP_ARRAY(
+            (SELECT
                 json_object(
                 'item_id', albums.item_id,
                 'provider', 'library',
@@ -80,8 +80,9 @@ class TracksController(MediaControllerBase[Track]):
                     'sort_name', albums.sort_name,
                     'media_type', 'album',
                     'disc_number', album_tracks.disc_number,
-                    'track_number', album_tracks.track_number
-                )) FROM albums JOIN album_tracks on album_tracks.track_id = tracks.item_id  WHERE albums.item_id = album_tracks.album_id) AS albums
+                    'track_number', album_tracks.track_number,
+                    'images', json_extract(albums.metadata, '$.images')
+                ) FROM albums JOIN album_tracks on album_tracks.track_id = tracks.item_id  WHERE albums.item_id = album_tracks.album_id) AS track_album
             FROM tracks"""  # noqa: E501
         # register (extra) api handlers
         api_base = self.api_base