mirror of
https://github.com/kristoferssolo/traxor.git
synced 2025-10-21 20:10:35 +00:00
53 lines
2.2 KiB
Rust
53 lines
2.2 KiB
Rust
use crate::app::{action::Action, App};
|
|
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
|
|
|
|
/// Handles the key events of [`App`].
|
|
pub fn get_action(key_event: KeyEvent) -> Option<Action> {
|
|
match key_event.code {
|
|
// Exit application on `ESC` or `q`
|
|
KeyCode::Esc | KeyCode::Char('q') => Some(Action::Quit),
|
|
|
|
// Exit application on `Ctrl-C`
|
|
KeyCode::Char('c') | KeyCode::Char('C') => match key_event.modifiers {
|
|
KeyModifiers::CONTROL => Some(Action::Quit),
|
|
_ => None,
|
|
},
|
|
KeyCode::Char('l') | KeyCode::Right => Some(Action::NextTab),
|
|
KeyCode::Char('h') | KeyCode::Left => Some(Action::PrevTab),
|
|
KeyCode::Char('j') | KeyCode::Down => Some(Action::NextTorrent),
|
|
KeyCode::Char('k') | KeyCode::Up => Some(Action::PrevTorrent),
|
|
KeyCode::Char('1') => Some(Action::SwitchTab(0)),
|
|
KeyCode::Char('2') => Some(Action::SwitchTab(1)),
|
|
KeyCode::Char('3') => Some(Action::SwitchTab(2)),
|
|
KeyCode::Char('t') | KeyCode::Enter | KeyCode::Menu => Some(Action::ToggleTorrent),
|
|
KeyCode::Char('a') => Some(Action::ToggleAll),
|
|
KeyCode::Char('d') => Some(Action::Delete(false)),
|
|
KeyCode::Char('D') => Some(Action::Delete(true)),
|
|
KeyCode::Char(' ') => Some(Action::Select),
|
|
// Other handlers you could add here.
|
|
_ => None,
|
|
}
|
|
}
|
|
|
|
/// Handles the updates of [`App`].
|
|
pub async fn update(app: &mut App<'_>, action: Action) -> transmission_rpc::types::Result<()> {
|
|
match action {
|
|
Action::Quit => app.quit(),
|
|
Action::NextTab => app.next_tab(),
|
|
Action::PrevTab => app.prev_tab(),
|
|
Action::NextTorrent => app.next(),
|
|
Action::PrevTorrent => app.previous(),
|
|
Action::SwitchTab(x) => app.switch_tab(x as usize),
|
|
Action::TogglePopup => app.toggle_popup(),
|
|
Action::ToggleTorrent => app.toggle_torrents().await,
|
|
Action::ToggleAll => app.torrents.toggle_all().await,
|
|
Action::PauseAll => app.torrents.stop_all().await,
|
|
Action::StartAll => app.torrents.start_all().await,
|
|
Action::Move => unimplemented!(),
|
|
Action::Delete(x) => app.delete(x).await,
|
|
Action::Rename => unimplemented!(),
|
|
Action::Select => app.select(),
|
|
}
|
|
Ok(())
|
|
}
|