aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-12-04 22:25:41 -0500
committerJesse Luehrs <doy@tozt.net>2021-12-04 22:25:41 -0500
commiteda2f5ade23c468a2fc9e3f8ce9ad5ae7c8d0f02 (patch)
tree615692ca2d591dcbc189e98817a31f7bbff61153
parentc574a3b530aea38c14d8299cbe46d8ffab30d07b (diff)
downloadttyrec-bin-eda2f5ade23c468a2fc9e3f8ce9ad5ae7c8d0f02.tar.gz
ttyrec-bin-eda2f5ade23c468a2fc9e3f8ce9ad5ae7c8d0f02.zip
simplify
-rw-r--r--src/bin/ttyplay/input.rs15
-rw-r--r--src/bin/ttyplay/main.rs62
2 files changed, 37 insertions, 40 deletions
diff --git a/src/bin/ttyplay/input.rs b/src/bin/ttyplay/input.rs
index 31770fd..0da0c8b 100644
--- a/src/bin/ttyplay/input.rs
+++ b/src/bin/ttyplay/input.rs
@@ -1,8 +1,5 @@
-pub async fn handle(
- key: textmode::Key,
- event_w: async_std::channel::Sender<crate::event::Event>,
-) -> anyhow::Result<()> {
- let event = match key {
+pub fn to_event(key: &textmode::Key) -> Option<crate::event::Event> {
+ Some(match key {
textmode::Key::Char('g' | '0' | ')') => {
crate::event::Event::FirstFrame
}
@@ -12,10 +9,6 @@ pub async fn handle(
textmode::Key::Char('q') => crate::event::Event::Quit,
textmode::Key::Char(' ') => crate::event::Event::Pause,
textmode::Key::Ctrl(b'i') => crate::event::Event::ToggleUi,
- _ => return Ok(()),
- };
-
- event_w.send(event).await?;
-
- Ok(())
+ _ => return None,
+ })
}
diff --git a/src/bin/ttyplay/main.rs b/src/bin/ttyplay/main.rs
index a51435c..373dd75 100644
--- a/src/bin/ttyplay/main.rs
+++ b/src/bin/ttyplay/main.rs
@@ -172,67 +172,71 @@ async fn async_main(opt: Opt) -> anyhow::Result<()> {
let mut display = display::Display::new();
let mut current_screen = vt100::Parser::default().screen().clone();
let events = event::Reader::new(event_r);
- loop {
- let event = events.read().await;
+ while let Some(event) = events.read().await {
match event {
- Some(event::Event::Render((idx, screen))) => {
- current_screen = screen.clone();
- display.current_frame(idx);
- display.render(&screen, &mut output).await?;
- }
- Some(event::Event::Key(key)) => {
- input::handle(key, event_w.clone()).await?;
- }
- Some(event::Event::FrameLoaded(n)) => {
- if let Some(n) = n {
- display.total_frames(n);
- } else {
- display.done_loading();
+ event::Event::Key(key) => {
+ if let Some(event) = input::to_event(&key) {
+ event_w.send(event).await?;
}
- display.render(&current_screen, &mut output).await?;
+ continue;
}
- Some(event::Event::Pause) => {
+ event::Event::Pause => {
timer_w.send(TimerAction::Pause).await?;
+ continue;
}
- Some(event::Event::Paused(paused)) => {
- display.paused(paused);
- display.render(&current_screen, &mut output).await?;
- }
- Some(event::Event::FirstFrame) => {
+ event::Event::FirstFrame => {
timer_w.send(TimerAction::GotoFrame(0)).await?;
+ continue;
}
- Some(event::Event::LastFrame) => {
+ event::Event::LastFrame => {
timer_w
.send(TimerAction::GotoFrame(
display.get_total_frames() - 1,
))
.await?;
+ continue;
}
- Some(event::Event::NextFrame) => {
+ event::Event::NextFrame => {
timer_w
.send(TimerAction::GotoFrame(
display.get_current_frame() + 1,
))
.await?;
+ continue;
}
- Some(event::Event::PreviousFrame) => {
+ event::Event::PreviousFrame => {
timer_w
.send(TimerAction::GotoFrame(
display.get_current_frame() - 1,
))
.await?;
+ continue;
+ }
+ event::Event::Render((idx, screen)) => {
+ current_screen = screen.clone();
+ display.current_frame(idx);
+ }
+ event::Event::FrameLoaded(n) => {
+ if let Some(n) = n {
+ display.total_frames(n);
+ } else {
+ display.done_loading();
+ }
+ }
+ event::Event::Paused(paused) => {
+ display.paused(paused);
}
- Some(event::Event::ToggleUi) => {
+ event::Event::ToggleUi => {
display.toggle_ui();
- display.render(&current_screen, &mut output).await?;
}
- Some(event::Event::Quit) | None => {
- timer_w.send(TimerAction::Quit).await?;
+ event::Event::Quit => {
break;
}
}
+ display.render(&current_screen, &mut output).await?;
}
+ timer_w.send(TimerAction::Quit).await?;
timer_task.await;
Ok(())