ommp 0.1.2

Oh My Music Player — a terminal music player built with ratatui
use crossbeam_channel::Sender;
use crossterm::event::{self, Event as CtEvent, KeyEventKind};
use std::time::Duration;

use super::Event;

pub fn spawn_input_thread(tx: Sender<Event>) -> std::thread::JoinHandle<()> {
    std::thread::spawn(move || {
        loop {
            if event::poll(Duration::from_millis(100)).unwrap_or(false) {
                match event::read() {
                    Ok(CtEvent::Key(key)) => {
                        if key.kind == KeyEventKind::Press
                            && tx.send(Event::Key(key)).is_err()
                        {
                            break;
                        }
                    }
                    Ok(CtEvent::Mouse(mouse)) => {
                        if tx.send(Event::Mouse(mouse)).is_err() {
                            break;
                        }
                    }
                    Ok(CtEvent::Resize(_, _))
                        if tx.send(Event::Resize).is_err() => {
                            break;
                        }
                    _ => {}
                }
            }
        }
    })
}

pub fn spawn_tick_thread(tx: Sender<Event>, interval: Duration) -> std::thread::JoinHandle<()> {
    std::thread::spawn(move || loop {
        std::thread::sleep(interval);
        if tx.send(Event::Tick).is_err() {
            break;
        }
    })
}