fix image lookups (#274)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 29 Apr 2022 15:38:10 +0000 (17:38 +0200)
committerGitHub <noreply@github.com>
Fri, 29 Apr 2022 15:38:10 +0000 (17:38 +0200)
some leftover after metadata refactor

music_assistant/controllers/stream.py
music_assistant/helpers/images.py

index 3c482ab0da256a66094e2476f687796932755e6a..043c1dae861e49b8e5efd6ddde4eb907a2fba3b5 100644 (file)
@@ -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"
 
index 409d439451dfae7843630bb9023f2e25971e5777..fb334e21b3804b8a4e85d08affa70675c60be419 100644 (file)
@@ -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