theater_cli/tui/
events.rs1use crossterm::event::{self, Event, KeyCode, KeyEventKind};
2use std::time::Duration;
3
4use crate::tui::app::TuiApp;
5
6pub enum InputEvent {
7 Quit,
8 TogglePause,
9 ToggleAutoScroll,
10 ClearEvents,
11 None,
12}
13
14pub fn handle_input(app: &mut TuiApp) -> Result<InputEvent, Box<dyn std::error::Error>> {
15 if event::poll(Duration::from_millis(50))? {
17 if let Event::Key(key) = event::read()? {
18 if key.kind == KeyEventKind::Press {
20 match key.code {
21 KeyCode::Char('q') | KeyCode::Char('Q') => {
22 return Ok(InputEvent::Quit);
23 }
24 KeyCode::Char('p') | KeyCode::Char('P') => {
25 return Ok(InputEvent::TogglePause);
26 }
27 KeyCode::Char('r') | KeyCode::Char('R') => {
28 if app.paused {
29 return Ok(InputEvent::TogglePause);
30 }
31 }
32 KeyCode::Char('s') | KeyCode::Char('S') => {
33 return Ok(InputEvent::ToggleAutoScroll);
34 }
35 KeyCode::Char('c') | KeyCode::Char('C') => {
36 return Ok(InputEvent::ClearEvents);
37 }
38 KeyCode::Esc => {
39 return Ok(InputEvent::Quit);
40 }
41 _ => {}
42 }
43 }
44 }
45 }
46
47 Ok(InputEvent::None)
48}