From 0f00616dca071750381234b5c59c8ec1e71b28ed Mon Sep 17 00:00:00 2001 From: salmonik Date: Fri, 8 May 2026 01:12:31 +0200 Subject: Fix shuffle first song not being shuffled update_shuffle_indices now shuffles all indices when position is 0 (no tracks have been played yet), so the first track played is random instead of always being tracks[0]. Directory playback now uses q.current() to pick the first track, resolving through shuffled indices when shuffle is active. Also pins notify-rust version in Cargo.toml and removes PLAN.md (superseded by TODO.md). --- src/daemon.rs | 5 ++--- src/queue.rs | 4 +++- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/daemon.rs b/src/daemon.rs index cca9b11..00bf35f 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -453,11 +453,10 @@ fn process_command( q.add_track(file.clone()); } if !audio.is_playing() - && let Some(track) = files.first() + && let Some(track) = q.current() { - let track = Track::from_path(track.clone()); audio.play(track.path.clone()); - notification::notify_track(&track); + notification::notify_track(track); } format!("Queued {} tracks from: {}\n", files.len(), path_str) } diff --git a/src/queue.rs b/src/queue.rs index 53b104f..dca8e3d 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -171,7 +171,9 @@ impl Queue { if let ShuffleMode::All = self.shuffle { let mut rng = rand::rng(); let pos = self.position.min(len.saturating_sub(1)); - if pos + 1 < len { + if pos == 0 && len > 1 { + self.shuffled_indices.shuffle(&mut rng); + } else if pos + 1 < len { self.shuffled_indices[pos + 1..].shuffle(&mut rng); } } -- cgit v1.2.3