diff options
| author | salmonik <raisersoft@proton.me> | 2026-05-06 13:20:02 +0200 |
|---|---|---|
| committer | salmonik <raisersoft@proton.me> | 2026-05-06 13:20:02 +0200 |
| commit | 932436d47af1c73b6d5781dedec84bd82bfe7ff4 (patch) | |
| tree | 436d0554710e06b94ed62d5d429adff82f5c5fdb /src | |
| parent | Add install script, shell completions, and systemd service (diff) | |
| download | rsplayer-932436d47af1c73b6d5781dedec84bd82bfe7ff4.tar.gz rsplayer-932436d47af1c73b6d5781dedec84bd82bfe7ff4.zip | |
Add toggle command to resume/pause playback and fix queue display bug
- Add 'rsp toggle' command to toggle between play and pause
- Fix queue display showing wrong track as playing when shuffle is enabled
- Update shell completion scripts for new toggle command
Diffstat (limited to 'src')
| -rw-r--r-- | src/cli.rs | 5 | ||||
| -rw-r--r-- | src/daemon.rs | 15 |
2 files changed, 19 insertions, 1 deletions
| @@ -37,6 +37,8 @@ pub enum Commands { | |||
| 37 | Pause, | 37 | Pause, |
| 38 | /// Resume playback | 38 | /// Resume playback |
| 39 | Resume, | 39 | Resume, |
| 40 | /// Toggle play/pause | ||
| 41 | Toggle, | ||
| 40 | /// Stop playback | 42 | /// Stop playback |
| 41 | StopPlayback, | 43 | StopPlayback, |
| 42 | /// Skip to next track | 44 | /// Skip to next track |
| @@ -133,6 +135,9 @@ impl Cli { | |||
| 133 | Commands::Resume => { | 135 | Commands::Resume => { |
| 134 | crate::daemon::send_command("resume".to_string())?; | 136 | crate::daemon::send_command("resume".to_string())?; |
| 135 | } | 137 | } |
| 138 | Commands::Toggle => { | ||
| 139 | crate::daemon::send_command("toggle".to_string())?; | ||
| 140 | } | ||
| 136 | Commands::StopPlayback => { | 141 | Commands::StopPlayback => { |
| 137 | crate::daemon::send_command("stop".to_string())?; | 142 | crate::daemon::send_command("stop".to_string())?; |
| 138 | } | 143 | } |
diff --git a/src/daemon.rs b/src/daemon.rs index dab0e5a..3379c7b 100644 --- a/src/daemon.rs +++ b/src/daemon.rs | |||
| @@ -475,6 +475,15 @@ fn process_command( | |||
| 475 | audio.resume(); | 475 | audio.resume(); |
| 476 | "Resumed\n".to_string() | 476 | "Resumed\n".to_string() |
| 477 | } | 477 | } |
| 478 | "toggle" => { | ||
| 479 | if audio.is_playing() { | ||
| 480 | audio.pause(); | ||
| 481 | "Paused\n".to_string() | ||
| 482 | } else { | ||
| 483 | audio.resume(); | ||
| 484 | "Resumed\n".to_string() | ||
| 485 | } | ||
| 486 | } | ||
| 478 | "stop" => { | 487 | "stop" => { |
| 479 | audio.stop(); | 488 | audio.stop(); |
| 480 | // Clear queue on stop | 489 | // Clear queue on stop |
| @@ -685,6 +694,10 @@ fn process_command( | |||
| 685 | } else { | 694 | } else { |
| 686 | let mut output = String::new(); | 695 | let mut output = String::new(); |
| 687 | let current_position = q.position; | 696 | let current_position = q.position; |
| 697 | let playing_track_idx = match q.shuffle { | ||
| 698 | ShuffleMode::None => current_position, | ||
| 699 | _ => *q.shuffled_indices.get(current_position).unwrap_or(&0), | ||
| 700 | }; | ||
| 688 | // Use shuffled_indices for display order if shuffle is on | 701 | // Use shuffled_indices for display order if shuffle is on |
| 689 | let indices: Vec<usize> = if let ShuffleMode::None = q.shuffle { | 702 | let indices: Vec<usize> = if let ShuffleMode::None = q.shuffle { |
| 690 | (0..q.tracks.len()).collect() | 703 | (0..q.tracks.len()).collect() |
| @@ -694,7 +707,7 @@ fn process_command( | |||
| 694 | for (display_idx, &track_idx) in indices.iter().enumerate() { | 707 | for (display_idx, &track_idx) in indices.iter().enumerate() { |
| 695 | if let Some(track) = q.tracks.get(track_idx) { | 708 | if let Some(track) = q.tracks.get(track_idx) { |
| 696 | let track_str = track.display_string(display_idx); | 709 | let track_str = track.display_string(display_idx); |
| 697 | if track_idx == current_position { | 710 | if track_idx == playing_track_idx { |
| 698 | output.push_str(&format!("> {} (playing)\n", track_str)); | 711 | output.push_str(&format!("> {} (playing)\n", track_str)); |
| 699 | } else { | 712 | } else { |
| 700 | output.push_str(&format!(" {}\n", track_str)); | 713 | output.push_str(&format!(" {}\n", track_str)); |
