1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
use crate::app::Task; use crate::app::{ExternalMsg, InternalMsg, MsgIn}; use crate::input::Key; use crossterm::event::{self, Event}; use std::sync::mpsc::{Receiver, Sender}; use std::thread; use std::time::Duration; pub fn keep_reading(tx_msg_in: Sender<Task>, rx_event_reader: Receiver<bool>) { thread::spawn(move || { let mut is_paused = false; loop { if let Ok(paused) = rx_event_reader.try_recv() { is_paused = paused; }; if !is_paused && event::poll(std::time::Duration::from_millis(1)).unwrap_or_default() { match event::read() { Ok(Event::Key(key)) => { let key = Key::from_event(key); let msg = MsgIn::Internal(InternalMsg::HandleKey(key)); tx_msg_in .send(Task::new(msg, Some(key))) .unwrap_or_default(); } Ok(Event::Resize(_, _)) => { let msg = MsgIn::External(ExternalMsg::Refresh); tx_msg_in.send(Task::new(msg, None)).unwrap_or_default(); } Ok(_) => {} Err(e) => { tx_msg_in .send(Task::new( MsgIn::External(ExternalMsg::LogError(e.to_string())), None, )) .unwrap_or_default(); } } } else { thread::sleep(Duration::from_millis(50)); } } }); }