aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/cli.rs5
-rw-r--r--src/daemon.rs15
2 files changed, 19 insertions, 1 deletions
diff --git a/src/cli.rs b/src/cli.rs
index a18b8f1..0da3078 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -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));