summaryrefslogtreecommitdiffstats
path: root/src/event/event_poller.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/event/event_poller.rs')
-rw-r--r--src/event/event_poller.rs22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/event/event_poller.rs b/src/event/event_poller.rs
index 2526070..7abf669 100644
--- a/src/event/event_poller.rs
+++ b/src/event/event_poller.rs
@@ -1,24 +1,34 @@
+use std::sync::mpsc::Receiver;
use std::sync::Arc;
+use std::time::Duration;
use anyhow::Result;
-use tuikit::error::TuikitError;
-use tuikit::event::Event;
use tuikit::term::Term;
+use crate::event::FmEvents;
+
/// Simple struct to read the events.
pub struct EventReader {
pub term: Arc<Term>,
+ pub fm_receiver: Receiver<FmEvents>,
}
impl EventReader {
/// Creates a new instance with an Arc to a terminal.
- pub fn new(term: Arc<Term>) -> Self {
- Self { term }
+ pub fn new(term: Arc<Term>, fm_receiver: Receiver<FmEvents>) -> Self {
+ Self { term, fm_receiver }
}
/// Returns the events as they're received. Wait indefinitely for a new one.
/// We should spend most of the application life here, doing nothing :)
- pub fn poll_event(&self) -> Result<Event, TuikitError> {
- self.term.poll_event()
+ pub fn poll_event(&self) -> Result<FmEvents> {
+ loop {
+ if let Ok(event) = self.fm_receiver.try_recv() {
+ return Ok(event);
+ }
+ if let Ok(event) = self.term.peek_event(Duration::from_millis(100)) {
+ return Ok(FmEvents::Event(event));
+ }
+ }
}
}