From 43562db0804338f2d55dff13439f1165f8dd9d3f Mon Sep 17 00:00:00 2001 From: salmonik Date: Sat, 16 May 2026 12:47:43 +0200 Subject: first public release. --- src/daemon.rs | 32 ++++++++++++++++---------------- src/notification.rs | 8 ++++++++ src/queue.rs | 16 ++++++++++++++++ 3 files changed, 40 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/daemon.rs b/src/daemon.rs index 06b925e..59fc3d8 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -544,10 +544,10 @@ fn process_command( ); let result = match temp_scrobbler.validate_listenbrainz_token() { Ok(Some(user)) => { - notification::notify_change(&format!( - "Logged in to ListenBrainz as {}", - user - )); + notification::notify( + "RSPlayer scrobbler login", + &format!("Logged in to ListenBrainz as {}", user), + ); format!("ListenBrainz token valid (user: {})\n", user) } Ok(None) => { @@ -779,19 +779,19 @@ fn process_command( for file in &files { q.add_track(file.clone()); } - if was_empty - && !was_playing - && let Some(track) = q.current() - { - audio.play(track.path.clone()); - send_now_playing(scrobbler, track); - if let Ok(mut s) = scrobble_state.lock() { - s.start(track.clone()); + if was_empty && !was_playing { + q.shuffle_initial(); + if let Some(track) = q.current() { + audio.play(track.path.clone()); + send_now_playing(scrobbler, track); + if let Ok(mut s) = scrobble_state.lock() { + s.start(track.clone()); + } + let fmt = Config::load() + .ok() + .and_then(|c| c.display_format.clone()); + notification::notify_track(track, fmt.as_deref()); } - let fmt = Config::load() - .ok() - .and_then(|c| c.display_format.clone()); - notification::notify_track(track, fmt.as_deref()); } format!("Queued {} tracks from: {}\n", files.len(), path_str) } diff --git a/src/notification.rs b/src/notification.rs index df9c622..2c8d80f 100644 --- a/src/notification.rs +++ b/src/notification.rs @@ -45,3 +45,11 @@ pub fn notify_error(context: &str) { .appname("RSPlayer") .show(); } + +pub fn notify(summary: &str, body: &str) { + let _ = notify_rust::Notification::new() + .summary(summary) + .body(body) + .appname("RSPlayer") + .show(); +} diff --git a/src/queue.rs b/src/queue.rs index 8f98173..26aeb8b 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -385,6 +385,22 @@ impl Queue { &self.shuffled_indices } + pub fn shuffle_initial(&mut self) { + if self.position != 0 || self.tracks.len() <= 1 { + return; + } + let mut rng = rand::rng(); + match self.shuffle { + ShuffleMode::All => { + self.shuffled_indices.shuffle(&mut rng); + } + ShuffleMode::Album => { + self.shuffle_album_range(0..self.tracks.len(), &mut rng); + } + ShuffleMode::None => {} + } + } + pub fn clear(&mut self) { self.tracks.clear(); self.position = 0; -- cgit v1.2.3