diff --git a/src-tauri/src/commands/playback_context.rs b/src-tauri/src/commands/playback_context.rs index b28918b36..79822d89b 100644 --- a/src-tauri/src/commands/playback_context.rs +++ b/src-tauri/src/commands/playback_context.rs @@ -28,6 +28,7 @@ pub fn set_playback_context( "artist_top" => ContextType::ArtistTop, "home_list" => ContextType::HomeList, "favorites" => ContextType::Favorites, + "local_library" => ContextType::LocalLibrary, _ => return Err(format!("Invalid context type: {}", context_type)), }; diff --git a/src-tauri/src/queue/mod.rs b/src-tauri/src/queue/mod.rs index c0c9df9fe..a1c8e3d7b 100644 --- a/src-tauri/src/queue/mod.rs +++ b/src-tauri/src/queue/mod.rs @@ -525,15 +525,18 @@ impl QueueManager { order.swap(i, j); } - // If there's a current track, move it to the front - if let Some(curr_idx) = state.current_index { - if let Some(pos) = order.iter().position(|&x| x == curr_idx) { - order.remove(pos); - order.insert(0, curr_idx); - } - } - state.shuffle_order = order; - state.shuffle_position = 0; + + // If there's a current track, find its position in the new shuffle order + // (don't move it to front, just update our position in the shuffled list) + if let Some(curr_idx) = state.current_index { + if let Some(pos) = state.shuffle_order.iter().position(|&x| x == curr_idx) { + state.shuffle_position = pos; + } else { + state.shuffle_position = 0; + } + } else { + state.shuffle_position = 0; + } } } diff --git a/src/lib/components/views/ArtistDetailView.svelte b/src/lib/components/views/ArtistDetailView.svelte index c338c4f6b..376d28892 100644 --- a/src/lib/components/views/ArtistDetailView.svelte +++ b/src/lib/components/views/ArtistDetailView.svelte @@ -330,7 +330,7 @@ const index = trackIndex !== undefined ? trackIndex : trackIds.indexOf(track.id); if (index >= 0) { - setPlaybackContext( + await setPlaybackContext( 'artist_top', artist.id.toString(), artist.name, diff --git a/src/lib/components/views/FavoritesView.svelte b/src/lib/components/views/FavoritesView.svelte index 36aa46679..0e6822258 100644 --- a/src/lib/components/views/FavoritesView.svelte +++ b/src/lib/components/views/FavoritesView.svelte @@ -741,9 +741,9 @@ })); } - function setFavoritesContext(trackIds: number[], index: number) { + async function setFavoritesContext(trackIds: number[], index: number) { if (trackIds.length === 0) return; - setPlaybackContext( + await setPlaybackContext( 'favorites', 'favorites', 'Favorites', @@ -761,7 +761,7 @@ async function handleTrackClick(track: FavoriteTrack, index: number) { const trackIds = filteredTracks.map(t => t.id); - setFavoritesContext(trackIds, index); + await setFavoritesContext(trackIds, index); try { await setFavoritesQueue(index); @@ -779,7 +779,7 @@ try { await setFavoritesQueue(0); - setFavoritesContext(filteredTracks.map(t => t.id), 0); + await setFavoritesContext(filteredTracks.map(t => t.id), 0); onTrackPlay(buildDisplayTrack(filteredTracks[0], 0)); } catch (err) { console.error('Failed to set queue:', err); diff --git a/src/lib/components/views/HomeView.svelte b/src/lib/components/views/HomeView.svelte index 61c998f09..77545a7be 100644 --- a/src/lib/components/views/HomeView.svelte +++ b/src/lib/components/views/HomeView.svelte @@ -357,8 +357,8 @@ // Create continue listening context if (continueTracks.length > 0) { const trackIds = continueTracks.map(t => t.id); - - setPlaybackContext( + + await setPlaybackContext( 'home_list', 'continue_listening', 'Continue Listening', diff --git a/src/lib/components/views/PlaylistDetailView.svelte b/src/lib/components/views/PlaylistDetailView.svelte index 3c9a77689..21a5831b0 100644 --- a/src/lib/components/views/PlaylistDetailView.svelte +++ b/src/lib/components/views/PlaylistDetailView.svelte @@ -585,7 +585,7 @@ const contextIndex = trackIds.indexOf(track.id); if (contextIndex >= 0 && trackIds.length > 0) { - setPlaybackContext( + await setPlaybackContext( 'playlist', playlist.id.toString(), playlist.name, diff --git a/src/lib/components/views/SearchView.svelte b/src/lib/components/views/SearchView.svelte index 12222a815..7475015c8 100644 --- a/src/lib/components/views/SearchView.svelte +++ b/src/lib/components/views/SearchView.svelte @@ -399,9 +399,9 @@ // Create search results context if (trackResults && trackResults.items.length > 0) { const trackIds = trackResults.items.map(t => t.id); - - setPlaybackContext( - 'search', + + await setPlaybackContext( + 'home_list', // Using home_list for search results (search type doesn't exist yet) currentQuery, `Search: ${currentQuery}`, 'qobuz',