From: Marcel van der Veldt Date: Fri, 29 Apr 2022 15:38:10 +0000 (+0200) Subject: fix image lookups (#274) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=0eebdd26cd4d8ce197a1b3cb3bc925b856f37388;p=music-assistant-server.git fix image lookups (#274) some leftover after metadata refactor --- diff --git a/music_assistant/controllers/stream.py b/music_assistant/controllers/stream.py index 3c482ab0..043c1dae 100644 --- a/music_assistant/controllers/stream.py +++ b/music_assistant/controllers/stream.py @@ -51,7 +51,7 @@ class StreamController: async def get_preview_url(self, provider: str, track_id: str) -> str: """Return url to short preview sample.""" track = await self.mass.music.tracks.get_provider_item(track_id, provider) - if preview := track.metadata.get("preview"): + if preview := track.metadata.preview: return preview return f"http://{self._ip}:{self._port}/preview/{provider}/{track_id}.mp3" diff --git a/music_assistant/helpers/images.py b/music_assistant/helpers/images.py index 409d4394..fb334e21 100644 --- a/music_assistant/helpers/images.py +++ b/music_assistant/helpers/images.py @@ -6,7 +6,12 @@ from io import BytesIO from PIL import Image from music_assistant.helpers.typing import MusicAssistant -from music_assistant.models.media_items import ItemMapping, MediaItemType, MediaType +from music_assistant.models.media_items import ( + ImageType, + ItemMapping, + MediaItemType, + MediaType, +) async def create_thumbnail(mass: MusicAssistant, url, size: int = 150) -> bytes: @@ -20,34 +25,32 @@ async def create_thumbnail(mass: MusicAssistant, url, size: int = 150) -> bytes: return img_data.getvalue() -async def get_image_url(mass: MusicAssistant, media_item: MediaItemType): +async def get_image_url( + mass: MusicAssistant, + media_item: MediaItemType, + img_type: ImageType = ImageType.THUMB, +): """Get url to image for given media media_item.""" if not media_item: return None if isinstance(media_item, ItemMapping): media_item = await mass.music.get_item_by_uri(media_item.uri) - if media_item and media_item.metadata.get("image"): - return media_item.metadata.image - if ( - hasattr(media_item, "album") - and hasattr(media_item.album, "metadata") - and media_item.album.metadata.get("image") - ): - return media_item.album.metadata.image - if hasattr(media_item, "albums"): - for album in media_item.albums: - if hasattr(album, "metadata") and album.metadata.get("image"): - return album.metadata.image - if ( - hasattr(media_item, "artist") - and hasattr(media_item.artist, "metadata") - and media_item.artist.metadata.get("image") - ): - return media_item.artist.metadata.image + if media_item and media_item.metadata.images: + for img in media_item.metadata.images: + if img.type == img_type: + return img.url + + # retry with track's album if media_item.media_type == MediaType.TRACK and media_item.album: - # try album instead for tracks - return await get_image_url(mass, media_item.album) + return await get_image_url(mass, media_item.album, img_type) + + # try artist instead for albums if media_item.media_type == MediaType.ALBUM and media_item.artist: - # try artist instead for albums - return await get_image_url(mass, media_item.artist) + return await get_image_url(mass, media_item.artist, img_type) + + # last resort: track artist(s) + if media_item.media_type == MediaType.TRACK and media_item.artists: + for artist in media_item.artists: + return await get_image_url(mass, artist, img_type) + return None