aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorsalmonik <raisersoft@proton.me>2026-05-16 12:47:43 +0200
committersalmonik <raisersoft@proton.me>2026-05-16 12:47:43 +0200
commit43562db0804338f2d55dff13439f1165f8dd9d3f (patch)
tree134248a95024815194d152de56f9b3f70d24d096 /src
parentAdd scrobbling support (Last.fm + ListenBrainz) and rsp settings reload (diff)
downloadrsplayer-43562db0804338f2d55dff13439f1165f8dd9d3f.tar.gz
rsplayer-43562db0804338f2d55dff13439f1165f8dd9d3f.zip
first public release.
Diffstat (limited to 'src')
-rw-r--r--src/daemon.rs32
-rw-r--r--src/notification.rs8
-rw-r--r--src/queue.rs16
3 files changed, 40 insertions, 16 deletions
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(
544 ); 544 );
545 let result = match temp_scrobbler.validate_listenbrainz_token() { 545 let result = match temp_scrobbler.validate_listenbrainz_token() {
546 Ok(Some(user)) => { 546 Ok(Some(user)) => {
547 notification::notify_change(&format!( 547 notification::notify(
548 "Logged in to ListenBrainz as {}", 548 "RSPlayer scrobbler login",
549 user 549 &format!("Logged in to ListenBrainz as {}", user),
550 )); 550 );
551 format!("ListenBrainz token valid (user: {})\n", user) 551 format!("ListenBrainz token valid (user: {})\n", user)
552 } 552 }
553 Ok(None) => { 553 Ok(None) => {
@@ -779,19 +779,19 @@ fn process_command(
779 for file in &files { 779 for file in &files {
780 q.add_track(file.clone()); 780 q.add_track(file.clone());
781 } 781 }
782 if was_empty 782 if was_empty && !was_playing {
783 && !was_playing 783 q.shuffle_initial();
784 && let Some(track) = q.current() 784 if let Some(track) = q.current() {
785 { 785 audio.play(track.path.clone());
786 audio.play(track.path.clone()); 786 send_now_playing(scrobbler, track);
787 send_now_playing(scrobbler, track); 787 if let Ok(mut s) = scrobble_state.lock() {
788 if let Ok(mut s) = scrobble_state.lock() { 788 s.start(track.clone());
789 s.start(track.clone()); 789 }
790 let fmt = Config::load()
791 .ok()
792 .and_then(|c| c.display_format.clone());
793 notification::notify_track(track, fmt.as_deref());
790 } 794 }
791 let fmt = Config::load()
792 .ok()
793 .and_then(|c| c.display_format.clone());
794 notification::notify_track(track, fmt.as_deref());
795 } 795 }
796 format!("Queued {} tracks from: {}\n", files.len(), path_str) 796 format!("Queued {} tracks from: {}\n", files.len(), path_str)
797 } 797 }
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) {
45 .appname("RSPlayer") 45 .appname("RSPlayer")
46 .show(); 46 .show();
47} 47}
48
49pub fn notify(summary: &str, body: &str) {
50 let _ = notify_rust::Notification::new()
51 .summary(summary)
52 .body(body)
53 .appname("RSPlayer")
54 .show();
55}
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 {
385 &self.shuffled_indices 385 &self.shuffled_indices
386 } 386 }
387 387
388 pub fn shuffle_initial(&mut self) {
389 if self.position != 0 || self.tracks.len() <= 1 {
390 return;
391 }
392 let mut rng = rand::rng();
393 match self.shuffle {
394 ShuffleMode::All => {
395 self.shuffled_indices.shuffle(&mut rng);
396 }
397 ShuffleMode::Album => {
398 self.shuffle_album_range(0..self.tracks.len(), &mut rng);
399 }
400 ShuffleMode::None => {}
401 }
402 }
403
388 pub fn clear(&mut self) { 404 pub fn clear(&mut self) {
389 self.tracks.clear(); 405 self.tracks.clear();
390 self.position = 0; 406 self.position = 0;