From 4069b362028db3423358133467542c160fccbdb1 Mon Sep 17 00:00:00 2001 From: XShine555 Date: Thu, 16 Jul 2026 01:15:50 +0200 Subject: [PATCH] feat(frontend): show YouTube tracks in recently played with their thumbnails --- frontend/src/lib/player/player.svelte.ts | 6 +++- .../routes/(app)/playlists/[id]/+page.svelte | 4 ++- frontend/src/routes/+page.svelte | 31 +++++++++++++++---- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/frontend/src/lib/player/player.svelte.ts b/frontend/src/lib/player/player.svelte.ts index 69322a4..e836b85 100644 --- a/frontend/src/lib/player/player.svelte.ts +++ b/frontend/src/lib/player/player.svelte.ts @@ -45,6 +45,10 @@ export function queueIdForTrack(track: ApiTrackLike): string | number { return isPendingYouTubeTrack(track) && track.externalId ? track.externalId : track.id; } +export function youTubeThumbnailUrl(videoId: string): string { + return `https://i.ytimg.com/vi/${videoId}/mqdefault.jpg`; +} + export function toQueueItems(tracks: ApiTrackLike[]): QueueItem[] { return tracks.map((track) => { const pendingYouTube = isPendingYouTubeTrack(track); @@ -53,7 +57,7 @@ export function toQueueItems(tracks: ApiTrackLike[]): QueueItem[] { title: track.title, artist: track.artist, source: pendingYouTube ? 'youtube' : 'local', - coverUrl: pendingYouTube ? `/api/tracks/${track.id}/cover?size=small` : undefined + coverUrl: pendingYouTube && track.externalId ? youTubeThumbnailUrl(track.externalId) : undefined }; }); } diff --git a/frontend/src/routes/(app)/playlists/[id]/+page.svelte b/frontend/src/routes/(app)/playlists/[id]/+page.svelte index 07985ed..f6ef42b 100644 --- a/frontend/src/routes/(app)/playlists/[id]/+page.svelte +++ b/frontend/src/routes/(app)/playlists/[id]/+page.svelte @@ -16,7 +16,8 @@ player, isPendingYouTubeTrack, queueIdForTrack, - toQueueItems + toQueueItems, + youTubeThumbnailUrl } from '$lib/player/player.svelte'; import { HUES, fmtTime } from '$lib/theme/color'; import Cover from '$lib/components/ui/Cover.svelte'; @@ -179,6 +180,7 @@ {/each}