ommp.git

ommp

~ Oh My Music Player — a standalone terminal music player built with Rust and ratatui
git clone https://github.com/debuman/ommp.git

src/event/input.rs (1362B)

      1 use crossbeam_channel::Sender;
      2 use crossterm::event::{self, Event as CtEvent, KeyEventKind};
      3 use std::time::Duration;
      4 
      5 use super::Event;
      6 
      7 pub fn spawn_input_thread(tx: Sender<Event>) -> std::thread::JoinHandle<()> {
      8     std::thread::spawn(move || {
      9         loop {
     10             if event::poll(Duration::from_millis(100)).unwrap_or(false) {
     11                 match event::read() {
     12                     Ok(CtEvent::Key(key)) => {
     13                         if key.kind == KeyEventKind::Press
     14                             && tx.send(Event::Key(key)).is_err()
     15                         {
     16                             break;
     17                         }
     18                     }
     19                     Ok(CtEvent::Mouse(mouse)) => {
     20                         if tx.send(Event::Mouse(mouse)).is_err() {
     21                             break;
     22                         }
     23                     }
     24                     Ok(CtEvent::Resize(_, _))
     25                         if tx.send(Event::Resize).is_err() => {
     26                             break;
     27                         }
     28                     _ => {}
     29                 }
     30             }
     31         }
     32     })
     33 }
     34 
     35 pub fn spawn_tick_thread(tx: Sender<Event>, interval: Duration) -> std::thread::JoinHandle<()> {
     36     std::thread::spawn(move || loop {
     37         std::thread::sleep(interval);
     38         if tx.send(Event::Tick).is_err() {
     39             break;
     40         }
     41     })
     42 }