70 lines
1.6 KiB
Rust
70 lines
1.6 KiB
Rust
use serde::{Serialize, Deserialize};
|
|
|
|
use tauri::async_runtime as rt;
|
|
|
|
use tauri_plugin_global_shortcut::{
|
|
GlobalShortcutExt,
|
|
Error as ShortcutError,
|
|
};
|
|
|
|
use crate::app::{self, APP};
|
|
use crate::config::HotkeysConfig;
|
|
use crate::errors::*;
|
|
use crate::terminal;
|
|
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
pub enum ShortcutAction {
|
|
ShowWindow,
|
|
LaunchTerminal,
|
|
}
|
|
|
|
|
|
pub fn exec_shortcut(action: ShortcutAction) {
|
|
match action {
|
|
ShortcutAction::LaunchTerminal => launch_terminal(),
|
|
ShortcutAction::ShowWindow => {
|
|
let app = APP.get().unwrap();
|
|
app::show_main_window(app)
|
|
.error_popup("Failed to show Creddy");
|
|
},
|
|
}
|
|
}
|
|
|
|
|
|
fn launch_terminal() {
|
|
rt::spawn(async {
|
|
terminal::launch(false)
|
|
.await
|
|
.error_popup("Failed to launch terminal")
|
|
});
|
|
}
|
|
|
|
|
|
pub fn register_hotkeys(hotkeys: &HotkeysConfig) -> Result<(), ShortcutError> {
|
|
let app = APP.get().unwrap();
|
|
let shortcuts = app.global_shortcut();
|
|
shortcuts.unregister_all([
|
|
hotkeys.show_window.keys.as_str(),
|
|
hotkeys.launch_terminal.keys.as_str(),
|
|
])?;
|
|
|
|
if hotkeys.show_window.enabled {
|
|
shortcuts.on_shortcut(
|
|
hotkeys.show_window.keys.as_str(),
|
|
|app, _shortcut, _event| {
|
|
app::show_main_window(app).error_popup("Failed to show Creddy")
|
|
}
|
|
)?;
|
|
}
|
|
|
|
if hotkeys.launch_terminal.enabled {
|
|
shortcuts.on_shortcut(
|
|
hotkeys.launch_terminal.keys.as_str(),
|
|
|_app, _shortcut, _event| launch_terminal()
|
|
)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|