diff options
Diffstat (limited to '')
| -rw-r--r-- | src/daemon.rs | 32 | ||||
| -rw-r--r-- | src/notification.rs | 8 | ||||
| -rw-r--r-- | src/queue.rs | 16 |
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 | |||
| 49 | pub 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; |
