diff --git a/src/lib/components/views/FavoritesView.svelte b/src/lib/components/views/FavoritesView.svelte index 18959b8b8..36aa46679 100644 --- a/src/lib/components/views/FavoritesView.svelte +++ b/src/lib/components/views/FavoritesView.svelte @@ -205,11 +205,18 @@ let showArtistGroupMenu = $state(false); let artistGroupingEnabled = $state(false); - let customIconSrc = $derived.by(() => - favoritesPreferences.custom_icon_path - ? convertFileSrc(favoritesPreferences.custom_icon_path) - : null - ); + function resolveCustomIconSrc(path: string | null): string | null { + if (!path) return null; + if (path.startsWith('asset://') || path.startsWith('http://asset.localhost') || path.startsWith('https://asset.localhost')) { + return path; + } + if (path.startsWith('file://')) { + return path; + } + return convertFileSrc(path); + } + + let customIconSrc = $derived.by(() => resolveCustomIconSrc(favoritesPreferences.custom_icon_path)); async function scrollToTrack(trackId: number) { await tick(); diff --git a/src/lib/components/views/HomeView.svelte b/src/lib/components/views/HomeView.svelte index c0173b958..61c998f09 100644 --- a/src/lib/components/views/HomeView.svelte +++ b/src/lib/components/views/HomeView.svelte @@ -61,6 +61,8 @@ downloadStateVersion?: number; onArtistClick?: (artistId: number) => void; onTrackPlay?: (track: DisplayTrack) => void; + activeTrackId?: number | null; + isPlaybackActive?: boolean; } let { @@ -77,7 +79,9 @@ checkAlbumFullyDownloaded, downloadStateVersion, onArtistClick, - onTrackPlay + onTrackPlay, + activeTrackId = null, + isPlaybackActive = false }: Props = $props(); // Home settings state @@ -775,6 +779,7 @@
{#each continueTracks as track, index} + {@const isActiveTrack = isPlaybackActive && activeTrackId === track.id} onArtistClick(track.artistId!) : undefined} diff --git a/src/lib/components/views/LocalLibraryView.svelte b/src/lib/components/views/LocalLibraryView.svelte index 5041f3abe..860d6af0a 100644 --- a/src/lib/components/views/LocalLibraryView.svelte +++ b/src/lib/components/views/LocalLibraryView.svelte @@ -131,6 +131,8 @@ onTrackPlayLater?: (track: LocalTrack) => void; onTrackAddToPlaylist?: (trackId: number) => void; onSetLocalQueue?: (trackIds: number[]) => void; + activeTrackId?: number | null; + isPlaybackActive?: boolean; } let { @@ -140,7 +142,9 @@ onTrackPlayNext, onTrackPlayLater, onTrackAddToPlaylist, - onSetLocalQueue + onSetLocalQueue, + activeTrackId = null, + isPlaybackActive = false }: Props = $props(); // View state @@ -1499,6 +1503,7 @@ artist={track.artist !== selectedAlbum?.artist ? track.artist : undefined} duration={formatDuration(track.duration_secs)} quality={getQualityBadge(track)} + isPlaying={isPlaybackActive && activeTrackId === track.id} isLocal={true} hideDownload={true} hideFavorite={true} @@ -2139,6 +2144,7 @@ artist={track.artist} duration={formatDuration(track.duration_secs)} quality={getQualityBadge(track)} + isPlaying={isPlaybackActive && activeTrackId === track.id} isLocal={true} hideDownload={true} hideFavorite={true} @@ -2162,6 +2168,7 @@ artist={track.artist} duration={formatDuration(track.duration_secs)} quality={getQualityBadge(track)} + isPlaying={isPlaybackActive && activeTrackId === track.id} isLocal={true} hideDownload={true} hideFavorite={true} diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 430a76006..0c6ea2285 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -2058,6 +2058,8 @@ {downloadStateVersion} onArtistClick={handleArtistClick} onTrackPlay={handleDisplayTrackPlay} + activeTrackId={currentTrack?.id ?? null} + isPlaybackActive={isPlaying} /> {/if} {:else if activeView === 'search'} @@ -2168,6 +2170,8 @@ onTrackAddToPlaylist={(trackId) => openAddToPlaylist([trackId], true)} onSetLocalQueue={handleSetLocalQueue} onQobuzArtistClick={handleArtistClick} + activeTrackId={currentTrack?.id ?? null} + isPlaybackActive={isPlaying} /> {:else if activeView === 'playlist' && selectedPlaylistId}