really basic actions
This commit is contained in:
parent
2570f99df6
commit
5043033881
3 changed files with 73 additions and 8 deletions
1
src-tauri/Cargo.lock
generated
1
src-tauri/Cargo.lock
generated
|
|
@ -1970,6 +1970,7 @@ dependencies = [
|
||||||
"cpal",
|
"cpal",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"log",
|
"log",
|
||||||
|
"once_cell",
|
||||||
"rdev",
|
"rdev",
|
||||||
"rubato",
|
"rubato",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ crate-type = ["staticlib", "cdylib", "rlib"]
|
||||||
tauri-build = { version = "2", features = [] }
|
tauri-build = { version = "2", features = [] }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
once_cell = "1"
|
||||||
tauri = { version = "2", features = ["tray-icon", 'image-png'] }
|
tauri = { version = "2", features = ["tray-icon", 'image-png'] }
|
||||||
tauri-plugin-opener = "2"
|
tauri-plugin-opener = "2"
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use once_cell::sync::Lazy;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use tauri::image::Image;
|
use tauri::image::Image;
|
||||||
use tauri::tray::TrayIcon;
|
use tauri::tray::TrayIcon;
|
||||||
|
|
@ -15,7 +17,17 @@ use crate::settings;
|
||||||
use crate::settings::ShortcutBinding;
|
use crate::settings::ShortcutBinding;
|
||||||
use crate::utils;
|
use crate::utils;
|
||||||
|
|
||||||
fn transcribe_pressed(app: &AppHandle) {
|
// Action Handler Types
|
||||||
|
pub type PressAction = fn(app: &AppHandle, shortcut_str: &str);
|
||||||
|
pub type ReleaseAction = fn(app: &AppHandle, shortcut_str: &str);
|
||||||
|
|
||||||
|
pub struct ActionSet {
|
||||||
|
pub press: PressAction,
|
||||||
|
pub release: ReleaseAction,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handler Functions
|
||||||
|
fn transcribe_pressed_action(app: &AppHandle, _shortcut_str: &str) {
|
||||||
let tray = app.state::<TrayIcon>();
|
let tray = app.state::<TrayIcon>();
|
||||||
tray.set_icon(Some(
|
tray.set_icon(Some(
|
||||||
Image::from_path(
|
Image::from_path(
|
||||||
|
|
@ -33,7 +45,7 @@ fn transcribe_pressed(app: &AppHandle) {
|
||||||
rm.try_start_recording("transcribe");
|
rm.try_start_recording("transcribe");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn transcribe_released(app: &AppHandle) {
|
fn transcribe_released_action(app: &AppHandle, _shortcut_str: &str) {
|
||||||
let tray = app.state::<TrayIcon>();
|
let tray = app.state::<TrayIcon>();
|
||||||
tray.set_icon(Some(
|
tray.set_icon(Some(
|
||||||
Image::from_path(
|
Image::from_path(
|
||||||
|
|
@ -65,12 +77,52 @@ fn transcribe_released(app: &AppHandle) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_binding_pressed_action(app: &AppHandle, shortcut_str: &str) {
|
||||||
|
println!(
|
||||||
|
"Shortcut ID 'test': Pressed - {} (App: {})",
|
||||||
|
shortcut_str,
|
||||||
|
app.package_info().name
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_binding_released_action(app: &AppHandle, shortcut_str: &str) {
|
||||||
|
println!(
|
||||||
|
"Shortcut ID 'test': Released - {} (App: {})",
|
||||||
|
shortcut_str,
|
||||||
|
app.package_info().name
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static Action Map
|
||||||
|
pub static ACTION_MAP: Lazy<HashMap<String, ActionSet>> = Lazy::new(|| {
|
||||||
|
let mut map = HashMap::new();
|
||||||
|
map.insert(
|
||||||
|
"transcribe".to_string(),
|
||||||
|
ActionSet {
|
||||||
|
press: transcribe_pressed_action,
|
||||||
|
release: transcribe_released_action,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
map.insert(
|
||||||
|
"test".to_string(),
|
||||||
|
ActionSet {
|
||||||
|
press: test_binding_pressed_action,
|
||||||
|
release: test_binding_released_action,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
// --- DEVELOPER ADDS NEW ACTIONS HERE ---
|
||||||
|
map
|
||||||
|
});
|
||||||
|
|
||||||
pub fn init_shortcuts(app: &App) {
|
pub fn init_shortcuts(app: &App) {
|
||||||
let settings = settings::load_or_create_app_settings(app);
|
let settings = settings::load_or_create_app_settings(app);
|
||||||
|
|
||||||
// Register shortcuts with the bindings from settings
|
// Register shortcuts with the bindings from settings
|
||||||
for (_id, binding) in settings.bindings {
|
for (_id, binding) in settings.bindings {
|
||||||
_register_shortcut(app.handle(), binding);
|
// Pass app.handle() which is &AppHandle
|
||||||
|
if let Err(e) = _register_shortcut(app.handle(), binding) {
|
||||||
|
eprintln!("Failed to register shortcut {}: {}", _id, e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -151,14 +203,25 @@ fn _register_shortcut(app: &AppHandle, binding: ShortcutBinding) -> Result<(), S
|
||||||
Err(e) => return Err(format!("Failed to parse shortcut: {}", e)),
|
Err(e) => return Err(format!("Failed to parse shortcut: {}", e)),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Clone binding.id for use in the closure
|
||||||
|
let binding_id_for_closure = binding.id.clone();
|
||||||
|
|
||||||
app.global_shortcut()
|
app.global_shortcut()
|
||||||
.on_shortcut(shortcut, move |handler_app, scut, event| {
|
.on_shortcut(shortcut, move |handler_app, scut, event| {
|
||||||
if scut == &shortcut {
|
if scut == &shortcut {
|
||||||
println!("Global Shortcut pressed! {}", scut.into_string());
|
let shortcut_string = scut.into_string();
|
||||||
if event.state == ShortcutState::Pressed {
|
|
||||||
transcribe_pressed(handler_app);
|
if let Some(action_set) = ACTION_MAP.get(&binding_id_for_closure) {
|
||||||
} else if event.state == ShortcutState::Released {
|
if event.state == ShortcutState::Pressed {
|
||||||
transcribe_released(handler_app);
|
(action_set.press)(handler_app, &shortcut_string);
|
||||||
|
} else if event.state == ShortcutState::Released {
|
||||||
|
(action_set.release)(handler_app, &shortcut_string);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
println!(
|
||||||
|
"Warning: No action defined in ACTION_MAP for shortcut ID '{}'. Shortcut: '{}', State: {:?}",
|
||||||
|
binding_id_for_closure, shortcut_string, event.state
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue