aboutsummaryrefslogtreecommitdiffstats
path: root/src/bin/ttyplay/input.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/ttyplay/input.rs')
-rw-r--r--src/bin/ttyplay/input.rs58
1 files changed, 36 insertions, 22 deletions
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,
- })
+ });
}