Theoretically support media keys

This commit is contained in:
Josh Hansen 2023-05-30 20:41:15 -07:00
parent 952b60b9a4
commit 2bc6aaca21

View file

@ -6,7 +6,7 @@ use clap::Parser;
use cpal::traits::{DeviceTrait, StreamTrait};
use cpal::{self, traits::HostTrait};
use cpal::{OutputCallbackInfo, Stream, StreamConfig};
use crossterm::event::{Event, KeyCode, KeyModifiers};
use crossterm::event::{Event, KeyCode, KeyModifiers, MediaKeyCode};
use crossterm::terminal::{disable_raw_mode, enable_raw_mode};
use minimp3::{Decoder, Frame};
use rand::{seq::SliceRandom, thread_rng};
@ -42,7 +42,9 @@ enum Command {
// AnnotateYesNow,
// AnnotateNoNow,
NextFile,
Play,
Pause,
PlayPause,
Quit,
}
@ -58,7 +60,19 @@ impl TryFrom<char> for Command {
'M' => Ok(Self::AnnotateEntireFile(Class::Music)),
'S' => Ok(Self::AnnotateEntireFile(Class::Speech)),
'q' => Ok(Self::Quit),
' ' => Ok(Self::Pause),
' ' => Ok(Self::PlayPause),
_ => Err(()),
}
}
}
impl TryFrom<MediaKeyCode> for Command {
type Error = ();
fn try_from(m: MediaKeyCode) -> Result<Self, Self::Error> {
match m {
MediaKeyCode::Play => Ok(Command::Play),
MediaKeyCode::Pause => Ok(Command::Pause),
MediaKeyCode::PlayPause => Ok(Command::PlayPause),
_ => Err(()),
}
}
@ -107,7 +121,12 @@ fn main() -> Result<(), magic::MagicError> {
input_tx.send(cmd).unwrap();
}
}
KeyCode::Pause => input_tx.send(Command::Pause).unwrap(),
KeyCode::Media(media) => {
if let Ok(cmd) = Command::try_from(media) {
input_tx.send(cmd).unwrap();
}
}
KeyCode::Pause => input_tx.send(Command::PlayPause).unwrap(),
_ => {}
},
_ => {}
@ -246,7 +265,15 @@ fn main() -> Result<(), magic::MagicError> {
idx.lock().unwrap()
);
}
Command::Play => {
stream.as_ref().unwrap().play().unwrap();
paused = false;
}
Command::Pause => {
stream.as_ref().unwrap().pause().unwrap();
paused = true;
}
Command::PlayPause => {
if paused {
stream.as_ref().unwrap().play().unwrap();
paused = false;