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
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; 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 Some(paused) = rx_event_reader.try_recv().ok() { is_paused = paused; }; if !is_paused { if event::poll(std::time::Duration::from_millis(1)).unwrap() { 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(0, msg, Some(key))).unwrap(); } Ok(Event::Resize(_, _)) => { let msg = MsgIn::External(ExternalMsg::Refresh); tx_msg_in.send(Task::new(0, msg, None)).unwrap(); } Ok(_) => {} Err(e) => { tx_msg_in .send(Task::new( 0, MsgIn::External(ExternalMsg::LogError(e.to_string())), None, )) .unwrap(); } } } } } }); }