From 4643e8806fb33c1d81e40a91693bbed8dc957ee1 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Wed, 21 Aug 2024 09:46:46 +0200 Subject: [PATCH] Fix (album) images for track listings (#1586) --- .../server/controllers/media/base.py | 21 ++++++++++--------- .../server/controllers/media/tracks.py | 7 ++++--- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/music_assistant/server/controllers/media/base.py b/music_assistant/server/controllers/media/base.py index adde2733..17f984a5 100644 --- a/music_assistant/server/controllers/media/base.py +++ b/music_assistant/server/controllers/media/base.py @@ -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 diff --git a/music_assistant/server/controllers/media/tracks.py b/music_assistant/server/controllers/media/tracks.py index 257de4e8..16e59b0c 100644 --- a/music_assistant/server/controllers/media/tracks.py +++ b/music_assistant/server/controllers/media/tracks.py @@ -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 -- 2.34.1