86 lines
2.7 KiB
Rust
86 lines
2.7 KiB
Rust
use crate::{ACTIVE_TASKS, RELOAD, SHUTDOWN, gui::tui::UNIQUE, util::config_util::CONFIG};
|
|
use crossterm::event::{KeyEvent, KeyModifiers};
|
|
use ratatui::crossterm::event::{Event, KeyCode, read};
|
|
use tokio::{self};
|
|
|
|
pub fn setup_input_handler() {
|
|
tokio::spawn(async move {
|
|
{
|
|
ACTIVE_TASKS
|
|
.lock()
|
|
.unwrap()
|
|
.push("Input Handler".to_string());
|
|
}
|
|
while let Ok(event) = read() {
|
|
if *SHUTDOWN.read().await {
|
|
break;
|
|
}
|
|
if let Event::Key(key) = event {
|
|
handle_input(key).await;
|
|
}
|
|
if *SHUTDOWN.read().await {
|
|
break;
|
|
}
|
|
}
|
|
{
|
|
ACTIVE_TASKS
|
|
.lock()
|
|
.unwrap()
|
|
.retain(|t| !t.eq(&"Input Handler".to_string()));
|
|
}
|
|
});
|
|
}
|
|
|
|
pub async fn handle_input(key: KeyEvent) {
|
|
match (key.code, key.modifiers) {
|
|
(KeyCode::Char('c'), KeyModifiers::CONTROL) => {
|
|
*SHUTDOWN.write().await = true;
|
|
}
|
|
(KeyCode::Char('r'), KeyModifiers::CONTROL) => {
|
|
{
|
|
*RELOAD.write().await = true;
|
|
}
|
|
{
|
|
*SHUTDOWN.write().await = true;
|
|
}
|
|
}
|
|
(KeyCode::Backspace, KeyModifiers::NONE) => {
|
|
let password: String = {
|
|
let cfg = CONFIG.read().await;
|
|
cfg.get("password").as_str().unwrap_or("").to_string()
|
|
};
|
|
let password: &str = &password;
|
|
let password = match password.char_indices().next_back() {
|
|
Some((i, _)) => &password[..i],
|
|
None => password,
|
|
};
|
|
|
|
CONFIG.write().await.change("password", password);
|
|
CONFIG.write().await.update();
|
|
*UNIQUE.write().await = true;
|
|
}
|
|
(KeyCode::Char(c), KeyModifiers::NONE) => {
|
|
let password: String = {
|
|
let cfg = CONFIG.read().await;
|
|
cfg.get("password").as_str().unwrap_or("").to_string()
|
|
};
|
|
let password = &format!("{}{}", password, c);
|
|
|
|
CONFIG.write().await.change("password", password);
|
|
CONFIG.write().await.update();
|
|
*UNIQUE.write().await = true;
|
|
}
|
|
(KeyCode::Char(c), KeyModifiers::SHIFT) => {
|
|
let password: String = {
|
|
let cfg = CONFIG.read().await;
|
|
cfg.get("password").as_str().unwrap_or("").to_string()
|
|
};
|
|
let password = &format!("{}{}", password, c);
|
|
|
|
CONFIG.write().await.change("password", password);
|
|
CONFIG.write().await.update();
|
|
*UNIQUE.write().await = true;
|
|
}
|
|
_ => {}
|
|
}
|
|
}
|