Refactored to ensure DRY

This commit is contained in:
Thorsten Sommer 2026-01-23 13:11:14 +01:00
parent e91bf25c81
commit 16486af6ec
Signed by untrusted user who does not match committer: tsommer
GPG Key ID: 371BBA77A02C0108

View File

@ -707,6 +707,36 @@ pub struct ShortcutResponse {
error_message: String, error_message: String,
} }
/// Internal helper function to register a shortcut with its callback.
/// This is used by both `register_shortcut` and `resume_shortcuts` to
/// avoid code duplication.
fn register_shortcut_with_callback(
shortcut_manager: &mut impl tauri::GlobalShortcutManager,
shortcut: &str,
name: &str,
event_sender: broadcast::Sender<Event>,
) -> Result<(), tauri::Error> {
let shortcut_name = name.to_string();
//
// Match the shortcut registration to transform the Tauri result into the Rust result:
//
match shortcut_manager.register(shortcut, move || {
info!(Source = "Tauri"; "Global shortcut triggered for '{shortcut_name}'.");
let event = Event::new(TauriEventType::GlobalShortcutPressed, vec![shortcut_name.clone()]);
let sender = event_sender.clone();
tauri::async_runtime::spawn(async move {
match sender.send(event) {
Ok(_) => {}
Err(error) => error!(Source = "Tauri"; "Failed to send global shortcut event: {error}"),
}
});
}) {
Ok(_) => Ok(()),
Err(e) => Err(e.into()),
}
}
/// Registers or updates a global shortcut. If the shortcut string is empty, /// Registers or updates a global shortcut. If the shortcut string is empty,
/// the existing shortcut for that name will be unregistered. /// the existing shortcut for that name will be unregistered.
#[post("/shortcuts/register", data = "<payload>")] #[post("/shortcuts/register", data = "<payload>")]
@ -768,19 +798,7 @@ pub fn register_shortcut(_token: APIToken, payload: Json<RegisterShortcutRequest
drop(event_broadcast_lock); drop(event_broadcast_lock);
// Register the new shortcut: // Register the new shortcut:
let shortcut_name = name.clone(); match register_shortcut_with_callback(&mut shortcut_manager, &new_shortcut, &name, event_sender) {
match shortcut_manager.register(new_shortcut.as_str(), move || {
info!(Source = "Tauri"; "Global shortcut triggered for '{shortcut_name}'.");
let event = Event::new(TauriEventType::GlobalShortcutPressed, vec![shortcut_name.clone()]);
let sender = event_sender.clone();
tauri::async_runtime::spawn(async move {
match sender.send(event) {
Ok(_) => {},
Err(error) => error!(Source = "Tauri"; "Failed to send global shortcut event: {error}"),
}
});
})
{
Ok(_) => { Ok(_) => {
info!(Source = "Tauri"; "Global shortcut '{new_shortcut}' registered successfully for '{name}'."); info!(Source = "Tauri"; "Global shortcut '{new_shortcut}' registered successfully for '{name}'.");
registered_shortcuts.insert(name, new_shortcut); registered_shortcuts.insert(name, new_shortcut);
@ -951,19 +969,7 @@ pub fn resume_shortcuts(_token: APIToken) -> Json<ShortcutResponse> {
continue; continue;
} }
let shortcut_name = name.clone(); match register_shortcut_with_callback(&mut shortcut_manager, shortcut, name, event_sender.clone()) {
let sender = event_sender.clone();
match shortcut_manager.register(shortcut.as_str(), move || {
info!(Source = "Tauri"; "Global shortcut triggered for '{shortcut_name}'.");
let event = Event::new(TauriEventType::GlobalShortcutPressed, vec![shortcut_name.clone()]);
let sender = sender.clone();
tauri::async_runtime::spawn(async move {
match sender.send(event) {
Ok(_) => {},
Err(error) => error!(Source = "Tauri"; "Failed to send global shortcut event: {error}"),
}
});
}) {
Ok(_) => { Ok(_) => {
info!(Source = "Tauri"; "Re-registered shortcut '{shortcut}' for '{name}'."); info!(Source = "Tauri"; "Re-registered shortcut '{shortcut}' for '{name}'.");
success_count += 1; success_count += 1;