Theoretically support media keys
This commit is contained in:
parent
952b60b9a4
commit
2bc6aaca21
1 changed files with 30 additions and 3 deletions
33
src/main.rs
33
src/main.rs
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue