diff --git a/custom_components/oasis_mini/browse_media.py b/custom_components/oasis_mini/browse_media.py index d0cdc74..5c406a5 100644 --- a/custom_components/oasis_mini/browse_media.py +++ b/custom_components/oasis_mini/browse_media.py @@ -17,7 +17,7 @@ from homeassistant.components.media_player import ( from .pyoasiscontrol import OasisCloudClient from .pyoasiscontrol.const import TRACKS -from .pyoasiscontrol.utils import get_track_ids_from_playlist, get_url_for_image +from .pyoasiscontrol.utils import get_image_url_from_track, get_track_ids_from_playlist _LOGGER = logging.getLogger(__name__) @@ -128,7 +128,7 @@ def build_tracks_root() -> BrowseMedia: media_content_type=MEDIA_TYPE_OASIS_TRACK, can_play=True, can_expand=False, - thumbnail=get_url_for_image(meta.get("image")), + thumbnail=get_image_url_from_track(meta), ) for track_id, meta in TRACKS.items() ] @@ -156,15 +156,15 @@ def build_track_item(track_id: int) -> BrowseMedia: media_content_type=MEDIA_TYPE_OASIS_TRACK, can_play=True, can_expand=False, - thumbnail=get_url_for_image(meta.get("image")), + thumbnail=get_image_url_from_track(meta), ) def get_first_image_for_playlist(playlist: dict[str, Any]) -> str | None: """Get the first image from a playlist dictionary.""" for track in playlist.get("patterns") or []: - if image := track.get("image"): - return get_url_for_image(image) + if image := get_image_url_from_track(track): + return image return None diff --git a/custom_components/oasis_mini/pyoasiscontrol/device.py b/custom_components/oasis_mini/pyoasiscontrol/device.py index 8b4d8e5..bb02fde 100644 --- a/custom_components/oasis_mini/pyoasiscontrol/device.py +++ b/custom_components/oasis_mini/pyoasiscontrol/device.py @@ -19,7 +19,7 @@ from .utils import ( _parse_int, create_svg, decrypt_svg_content, - get_url_for_image, + get_image_url_from_track, ) if TYPE_CHECKING: # avoid runtime circular imports @@ -407,9 +407,7 @@ class OasisDevice: Returns: str: Full URL to the track image or `None` if no image is available. """ - if track := self.track: - return get_url_for_image(track.get("image")) - return None + return get_image_url_from_track(self.track) @property def track_name(self) -> str | None: diff --git a/custom_components/oasis_mini/pyoasiscontrol/utils.py b/custom_components/oasis_mini/pyoasiscontrol/utils.py index bbb13c6..299d7da 100644 --- a/custom_components/oasis_mini/pyoasiscontrol/utils.py +++ b/custom_components/oasis_mini/pyoasiscontrol/utils.py @@ -22,6 +22,8 @@ COLOR_LIGHT_SHADE = ("#FFFFFF", "#86888F") COLOR_MEDIUM_SHADE = ("#E5E2DE", "#86888F") COLOR_MEDIUM_TINT = ("#B8B8B8", "#FFFFFF") +IMAGE_URL = "https://app.grounded.so/uploads/{image}" + def _bit_to_bool(val: str) -> bool: """Convert a bit string to bool.""" @@ -200,15 +202,17 @@ def decrypt_svg_content(svg_content: dict[str, str]): return decrypted +def get_image_url_from_track(track: dict[str, Any] | None) -> str | None: + """Get the image URL from a track.""" + if not isinstance(track, dict): + return None + return IMAGE_URL.format(image=image) if (image := track.get("image")) else None + + def get_track_ids_from_playlist(playlist: dict[str, Any]) -> list[int]: """Get a list of track ids from a playlist.""" return [track["id"] for track in (playlist.get("patterns") or []) if "id" in track] -def get_url_for_image(image: str | None) -> str | None: - """Get the full URL for an image.""" - return f"https://app.grounded.so/uploads/{image}" if image else None - - def now() -> datetime: return datetime.now(UTC)