aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-12-05 01:32:10 -0500
committerJesse Luehrs <doy@tozt.net>2021-12-05 01:32:10 -0500
commit91d2c04e349dec9b1b7873abf2cc6b960735654f (patch)
treebf687ec9216f076cbfd086ac46db5cfd4a45aa8d
parentc1ea723f8277470e2bbaff7cd679e50d23c427f2 (diff)
downloadttyrec-bin-91d2c04e349dec9b1b7873abf2cc6b960735654f.tar.gz
ttyrec-bin-91d2c04e349dec9b1b7873abf2cc6b960735654f.zip
remove some indirection
-rw-r--r--src/bin/ttyplay/event.rs8
-rw-r--r--src/bin/ttyplay/input.rs58
-rw-r--r--src/bin/ttyplay/main.rs19
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<usize>),
Paused(bool),
TimerAction(TimerAction),
@@ -63,7 +62,6 @@ impl Reader {
#[derive(Default)]
struct Pending {
render: Option<(usize, vt100::Screen)>,
- key: std::collections::VecDeque<textmode::Key>,
frame_loaded: Option<usize>,
done_loading: bool,
paused: Option<bool>,
@@ -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<crate::event::Event> {
- 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<crate::event::Event>,
+ 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<event::Event>,
- 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;