From 932436d47af1c73b6d5781dedec84bd82bfe7ff4 Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 6 May 2026 13:20:02 +0200 Subject: 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 --- src/daemon.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/daemon.rs') 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( audio.resume(); "Resumed\n".to_string() } + "toggle" => { + if audio.is_playing() { + audio.pause(); + "Paused\n".to_string() + } else { + audio.resume(); + "Resumed\n".to_string() + } + } "stop" => { audio.stop(); // Clear queue on stop @@ -685,6 +694,10 @@ fn process_command( } else { let mut output = String::new(); let current_position = q.position; + let playing_track_idx = match q.shuffle { + ShuffleMode::None => current_position, + _ => *q.shuffled_indices.get(current_position).unwrap_or(&0), + }; // Use shuffled_indices for display order if shuffle is on let indices: Vec = if let ShuffleMode::None = q.shuffle { (0..q.tracks.len()).collect() @@ -694,7 +707,7 @@ fn process_command( for (display_idx, &track_idx) in indices.iter().enumerate() { if let Some(track) = q.tracks.get(track_idx) { let track_str = track.display_string(display_idx); - if track_idx == current_position { + if track_idx == playing_track_idx { output.push_str(&format!("> {} (playing)\n", track_str)); } else { output.push_str(&format!(" {}\n", track_str)); -- cgit v1.2.3