From 5320c6d08c13c5eb40b0431502b0c8b8d04da561 Mon Sep 17 00:00:00 2001 From: salmonik Date: Sun, 10 May 2026 01:09:31 +0200 Subject: Fix album shuffle - shuffle tracks when adding in album mode --- src/queue.rs | 45 ++++++++++++++------------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/queue.rs b/src/queue.rs index edd973f..503560b 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -184,19 +184,11 @@ impl Queue { fn restore_from_original(&mut self) { if self.original_tracks.is_empty() { - eprintln!("DEBUG: original_tracks empty"); self.shuffled_indices.clear(); return; } let current_pos = self.position; - let indices_len = self.shuffled_indices.len().min(10); - eprintln!( - "DEBUG restore: current_pos={}, tracks.len={}, shuffled_indices={:?}", - current_pos, - self.tracks.len(), - &self.shuffled_indices[..indices_len] - ); // Find which tracks have been played (positions 0..=current_pos in shuffled order) let mut played_track_paths: Vec = Vec::new(); @@ -204,12 +196,6 @@ impl Queue { if let Some(&idx) = self.shuffled_indices.get(i) && let Some(track) = self.tracks.get(idx) { - eprintln!( - "DEBUG: played track at shuffled pos {} -> track idx {} = {:?}", - i, - idx, - track.path.file_name() - ); played_track_paths.push(track.path.clone()); } } @@ -222,22 +208,13 @@ impl Queue { } } - eprintln!("DEBUG: kept {} played tracks", new_tracks.len()); - // Add remaining tracks from original in original order - for (i, orig_track) in self.original_tracks.iter().enumerate() { + for orig_track in &self.original_tracks { let is_played = played_track_paths.iter().any(|p| p == &orig_track.path); if !is_played { - eprintln!( - "DEBUG: adding unplayed from original idx {}: {:?}", - i, - orig_track.path.file_name() - ); new_tracks.push(orig_track.clone()); } } - - eprintln!("DEBUG: final tracks.len={}", new_tracks.len()); self.tracks = new_tracks; self.position = current_pos; self.shuffled_indices.clear(); @@ -246,14 +223,20 @@ impl Queue { fn update_shuffle_indices(&mut self) { let len = self.tracks.len(); self.shuffled_indices = (0..len).collect(); - if let ShuffleMode::All = self.shuffle { - let mut rng = rand::rng(); - let pos = self.position.min(len.saturating_sub(1)); - if pos == 0 && len > 1 { - self.shuffled_indices.shuffle(&mut rng); - } else if pos + 1 < len { - self.shuffled_indices[pos + 1..].shuffle(&mut rng); + match self.shuffle { + ShuffleMode::All => { + let mut rng = rand::rng(); + let pos = self.position.min(len.saturating_sub(1)); + if pos == 0 && len > 1 { + self.shuffled_indices.shuffle(&mut rng); + } else if pos + 1 < len { + self.shuffled_indices[pos + 1..].shuffle(&mut rng); + } + } + ShuffleMode::Album => { + self.update_shuffle_indices_album(); } + ShuffleMode::None => {} } } -- cgit v1.2.3