From a473c969d9ba3eb26856480d8f23985e68b51943 Mon Sep 17 00:00:00 2001 From: vicrodh <103399283+vicrodh@users.noreply.github.com> Date: Sun, 18 Jan 2026 03:33:23 -0600 Subject: [PATCH] feat(phase35): implement context in SearchView MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Context creation: - Creates 'search' context when playing track from results - Uses search query as ID and 'Search: {query}' as label - Applies to both All tab (first 6) and Tracks tab (full list) - Stack icon will show "Playing from: Search ยท {query}" Search view now fully integrated with context system. cp --- src/lib/components/views/SearchView.svelte | 37 ++++++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/src/lib/components/views/SearchView.svelte b/src/lib/components/views/SearchView.svelte index 2658e9812..1fb9e7b6c 100644 --- a/src/lib/components/views/SearchView.svelte +++ b/src/lib/components/views/SearchView.svelte @@ -5,6 +5,7 @@ import AlbumCard from '../AlbumCard.svelte'; import TrackMenu from '../TrackMenu.svelte'; import { getSearchState, setSearchState, type SearchResults, type SearchAllResults, type SearchTab } from '$lib/stores/searchState'; + import { setPlaybackContext } from '$lib/stores/playbackContextStore'; import { t } from '$lib/i18n'; let searchInput: HTMLInputElement | null = null; @@ -375,6 +376,28 @@ return track.album?.image?.large || track.album?.image?.thumbnail || track.album?.image?.small || ''; } + function handleSearchTrackPlay(track: Track, trackIndex: number) { + // Create search results context + if (trackResults && trackResults.items.length > 0) { + const trackIds = trackResults.items.map(t => t.id); + + setPlaybackContext( + 'search', + currentQuery, + `Search: ${currentQuery}`, + 'qobuz', + trackIds, + trackIndex + ); + console.log(`[Search] Context created: "${currentQuery}", ${trackIds.length} tracks, starting at ${trackIndex}`); + } + + // Play track + if (onTrackPlay) { + onTrackPlay(track); + } + } + function getArtistImage(artist: Artist): string { return artist.image?.large || artist.image?.thumbnail || artist.image?.small || ''; } @@ -725,8 +748,8 @@ class="track-row" role="button" tabindex="0" - onclick={() => onTrackPlay?.(track)} - onkeydown={(e) => e.key === 'Enter' && onTrackPlay?.(track)} + onclick={() => handleSearchTrackPlay(track, index)} + onkeydown={(e) => e.key === 'Enter' && handleSearchTrackPlay(track, index)} >