From 2aac89ace73cd06fbfa6183202f0587d6b1b520e Mon Sep 17 00:00:00 2001 From: salmonik Date: Sat, 9 May 2026 17:16:52 +0200 Subject: Fix shuffle none - keep played tracks in place --- src/queue.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/queue.rs b/src/queue.rs index 109b748..698fc1d 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -189,11 +189,22 @@ impl Queue { } let current_pos = self.position; - let played: Vec = self.tracks[..current_pos].to_vec(); - let unplayed_original: Vec = self.original_tracks[current_pos..].to_vec(); - self.tracks = played; - self.tracks.extend(unplayed_original); + // Keep every track that's at a position <= current_pos (played + current) + // These stay at exactly the same positions + let keep_count = current_pos + 1; + let mut new_tracks: Vec = self.tracks[..keep_count].to_vec(); + + // Find all tracks from original that are NOT in the kept portion + // Insert them in their original order after current position + for orig_track in &self.original_tracks { + let in_kept = self.tracks[..keep_count].iter().any(|t| t.path == orig_track.path); + if !in_kept { + new_tracks.push(orig_track.clone()); + } + } + + self.tracks = new_tracks; self.position = current_pos; self.shuffled_indices.clear(); } -- cgit v1.2.3