mirror of
				https://github.com/talwat/lowfi
				synced 2025-10-30 18:58:45 +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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user