From 91d2c04e349dec9b1b7873abf2cc6b960735654f Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 5 Dec 2021 01:32:10 -0500 Subject: remove some indirection --- src/bin/ttyplay/event.rs | 8 ------- src/bin/ttyplay/input.rs | 58 ++++++++++++++++++++++++++++++------------------ src/bin/ttyplay/main.rs | 19 +--------------- 3 files changed, 37 insertions(+), 48 deletions(-) diff --git a/src/bin/ttyplay/event.rs b/src/bin/ttyplay/event.rs index 4effba4..8b47a5a 100644 --- a/src/bin/ttyplay/event.rs +++ b/src/bin/ttyplay/event.rs @@ -1,6 +1,5 @@ pub enum Event { FrameTransition((usize, vt100::Screen)), - Key(textmode::Key), FrameLoaded(Option), Paused(bool), TimerAction(TimerAction), @@ -63,7 +62,6 @@ impl Reader { #[derive(Default)] struct Pending { render: Option<(usize, vt100::Screen)>, - key: std::collections::VecDeque, frame_loaded: Option, done_loading: bool, paused: Option, @@ -82,9 +80,6 @@ impl Pending { Event::FrameTransition((idx, screen)) => { self.render = Some((idx, screen)); } - Event::Key(key) => { - self.key.push_back(key); - } Event::FrameLoaded(idx) => { if let Some(idx) = idx { self.frame_loaded = Some(idx); @@ -109,7 +104,6 @@ impl Pending { fn has_event(&self) -> bool { self.render.is_some() - || !self.key.is_empty() || self.frame_loaded.is_some() || self.done_loading || self.paused.is_some() @@ -122,8 +116,6 @@ impl Pending { if self.quit { self.quit = false; Some(Event::Quit) - } else if let Some(key) = self.key.pop_front() { - Some(Event::Key(key)) } else if let Some(action) = self.timer_actions.pop_front() { Some(Event::TimerAction(action)) } else if self.toggle_ui { diff --git a/src/bin/ttyplay/input.rs b/src/bin/ttyplay/input.rs index a922a55..d8c8e92 100644 --- a/src/bin/ttyplay/input.rs +++ b/src/bin/ttyplay/input.rs @@ -1,24 +1,38 @@ -pub fn to_event(key: &textmode::Key) -> Option { - Some(match key { - textmode::Key::Char('g' | '0' | ')') => { - crate::event::Event::TimerAction( - crate::event::TimerAction::FirstFrame, - ) +pub fn spawn_task( + event_w: async_std::channel::Sender, + mut input: textmode::Input, +) { + async_std::task::spawn(async move { + while let Some(key) = input.read_key().await.unwrap() { + let event = match key { + textmode::Key::Char('g' | '0' | ')') => { + crate::event::Event::TimerAction( + crate::event::TimerAction::FirstFrame, + ) + } + textmode::Key::Char('G' | '$') => { + crate::event::Event::TimerAction( + crate::event::TimerAction::LastFrame, + ) + } + textmode::Key::Char('l' | 'n') => { + crate::event::Event::TimerAction( + crate::event::TimerAction::NextFrame, + ) + } + textmode::Key::Char('h' | 'p') => { + crate::event::Event::TimerAction( + crate::event::TimerAction::PreviousFrame, + ) + } + textmode::Key::Char('q') => crate::event::Event::Quit, + textmode::Key::Char(' ') => crate::event::Event::TimerAction( + crate::event::TimerAction::Pause, + ), + textmode::Key::Ctrl(b'i') => crate::event::Event::ToggleUi, + _ => continue, + }; + event_w.send(event).await.unwrap(); } - textmode::Key::Char('G' | '$') => crate::event::Event::TimerAction( - crate::event::TimerAction::LastFrame, - ), - textmode::Key::Char('l' | 'n') => crate::event::Event::TimerAction( - crate::event::TimerAction::NextFrame, - ), - textmode::Key::Char('h' | 'p') => crate::event::Event::TimerAction( - crate::event::TimerAction::PreviousFrame, - ), - textmode::Key::Char('q') => crate::event::Event::Quit, - textmode::Key::Char(' ') => { - crate::event::Event::TimerAction(crate::event::TimerAction::Pause) - } - textmode::Key::Ctrl(b'i') => crate::event::Event::ToggleUi, - _ => return None, - }) + }); } diff --git a/src/bin/ttyplay/main.rs b/src/bin/ttyplay/main.rs index 0e0fe16..f2cec77 100644 --- a/src/bin/ttyplay/main.rs +++ b/src/bin/ttyplay/main.rs @@ -151,17 +151,6 @@ fn spawn_timer_task( }) } -fn spawn_input_task( - event_w: async_std::channel::Sender, - mut input: textmode::Input, -) { - async_std::task::spawn(async move { - while let Some(key) = input.read_key().await.unwrap() { - event_w.send(event::Event::Key(key)).await.unwrap(); - } - }); -} - async fn async_main(opt: Opt) -> anyhow::Result<()> { let Opt { file } = opt; @@ -179,7 +168,7 @@ async fn async_main(opt: Opt) -> anyhow::Result<()> { let (timer_w, timer_r) = async_std::channel::unbounded(); spawn_frame_reader_task(event_w.clone(), frames.clone(), fh); - spawn_input_task(event_w.clone(), input); + input::spawn_task(event_w.clone(), input); let timer_task = spawn_timer_task(event_w.clone(), frames.clone(), timer_r); @@ -188,12 +177,6 @@ async fn async_main(opt: Opt) -> anyhow::Result<()> { let events = event::Reader::new(event_r); while let Some(event) = events.read().await { match event { - event::Event::Key(key) => { - if let Some(event) = input::to_event(&key) { - event_w.send(event).await?; - } - continue; - } event::Event::TimerAction(action) => { timer_w.send(action).await?; continue; -- cgit v1.2.3-54-g00ecf