mirror of
https://github.com/talwat/lowfi
synced 2024-12-27 03:31:55 +00:00
feat: add wip support for media keys
This commit is contained in:
parent
86f88ff34f
commit
706ba97428
@ -39,7 +39,7 @@ pub enum Messages {
|
||||
/// Pauses the [Sink]. This will also unpause it if it is paused.
|
||||
Pause,
|
||||
|
||||
/// Change the volume of playback
|
||||
/// Change the volume of playback.
|
||||
ChangeVolume(f32),
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ use crate::Args;
|
||||
use super::Player;
|
||||
use crossterm::{
|
||||
cursor::{Hide, MoveTo, MoveToColumn, MoveUp, Show},
|
||||
event::{self, KeyCode, KeyModifiers},
|
||||
event::{self, KeyCode, KeyModifiers, KeyboardEnhancementFlags, PushKeyboardEnhancementFlags},
|
||||
style::{Print, Stylize},
|
||||
terminal::{self, Clear, ClearType, EnterAlternateScreen, LeaveAlternateScreen},
|
||||
};
|
||||
@ -100,12 +100,19 @@ async fn interface(player: Arc<Player>) -> eyre::Result<()> {
|
||||
pub async fn start(queue: Arc<Player>, sender: Sender<Messages>, args: Args) -> eyre::Result<()> {
|
||||
crossterm::execute!(stdout(), Hide)?;
|
||||
|
||||
terminal::enable_raw_mode()?;
|
||||
|
||||
if args.alternate {
|
||||
crossterm::execute!(stdout(), EnterAlternateScreen, MoveTo(0, 0))?;
|
||||
}
|
||||
|
||||
terminal::enable_raw_mode()?;
|
||||
|
||||
if terminal::supports_keyboard_enhancement()? {
|
||||
crossterm::execute!(
|
||||
stdout(),
|
||||
PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES,)
|
||||
)?;
|
||||
}
|
||||
|
||||
task::spawn(interface(Arc::clone(&queue)));
|
||||
|
||||
loop {
|
||||
@ -119,7 +126,7 @@ pub async fn start(queue: Arc<Player>, sender: Sender<Messages>, args: Args) ->
|
||||
KeyCode::Right => Messages::ChangeVolume(0.01),
|
||||
KeyCode::Down => Messages::ChangeVolume(-0.1),
|
||||
KeyCode::Left => Messages::ChangeVolume(-0.01),
|
||||
KeyCode::Char(character) => match character {
|
||||
KeyCode::Char(character) => match character.to_ascii_lowercase() {
|
||||
// Ctrl+C
|
||||
'c' if event.modifiers == KeyModifiers::CONTROL => break,
|
||||
|
||||
@ -137,6 +144,18 @@ pub async fn start(queue: Arc<Player>, sender: Sender<Messages>, args: Args) ->
|
||||
'-' | '_' => Messages::ChangeVolume(-0.1),
|
||||
_ => continue,
|
||||
},
|
||||
// Media keys
|
||||
KeyCode::Media(media) => match media {
|
||||
event::MediaKeyCode::Play => Messages::Pause,
|
||||
event::MediaKeyCode::Pause => Messages::Pause,
|
||||
event::MediaKeyCode::PlayPause => Messages::Pause,
|
||||
event::MediaKeyCode::Stop => Messages::Pause,
|
||||
event::MediaKeyCode::TrackNext => Messages::Next,
|
||||
event::MediaKeyCode::LowerVolume => Messages::ChangeVolume(-0.1),
|
||||
event::MediaKeyCode::RaiseVolume => Messages::ChangeVolume(0.1),
|
||||
event::MediaKeyCode::MuteVolume => Messages::ChangeVolume(-1.0),
|
||||
_ => continue,
|
||||
},
|
||||
_ => continue,
|
||||
};
|
||||
|
||||
|
@ -102,11 +102,10 @@ pub fn action(player: &Arc<Player>, width: usize) -> String {
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates the bottom controls bar, and also spaces it properly.
|
||||
pub fn controls(width: usize) -> String {
|
||||
let controls = [["[s]", "kip"], ["[p]", "ause"], ["[q]", "uit"]];
|
||||
|
||||
let len: usize = controls.concat().iter().map(|x| x.len()).sum();
|
||||
|
||||
let controls = controls.map(|x| format!("{}{}", x[0].bold(), x[1]));
|
||||
|
||||
controls.join(&" ".repeat((width - len) / (controls.len() - 1)))
|
||||
|
Loading…
Reference in New Issue
Block a user