use crate::TranscriptionCoordinator; #[cfg(unix)] use log::debug; use log::warn; use tauri::{AppHandle, Manager}; #[cfg(unix)] use signal_hook::consts::{SIGUSR1, SIGUSR2}; #[cfg(unix)] use signal_hook::iterator::Signals; #[cfg(unix)] use std::thread; /// Send a transcription input to the coordinator. /// Used by signal handlers, CLI flags, and any other external trigger. pub fn send_transcription_input(app: &AppHandle, binding_id: &str, source: &str) { if let Some(c) = app.try_state::() { c.send_input(binding_id, source, true, false); } else { warn!("TranscriptionCoordinator not initialized"); } } #[cfg(unix)] pub fn setup_signal_handler(app_handle: AppHandle, mut signals: Signals) { debug!("Signal handlers registered (SIGUSR1, SIGUSR2)"); thread::spawn(move || { for sig in signals.forever() { let (binding_id, signal_name) = match sig { SIGUSR1 => ("transcribe_with_post_process", "SIGUSR1"), SIGUSR2 => ("transcribe", "SIGUSR2"), _ => continue, }; debug!("Received {signal_name}"); send_transcription_input(&app_handle, binding_id, signal_name); } }); }