use tauri::{Emitter, Manager, WebviewUrl, WebviewWindowBuilder}; use crate::PreferencesScript; /// Open a floating always-on-top task window. #[tauri::command] pub async fn open_task_window( app: tauri::AppHandle, ) -> Result<(), String> { if let Some(window) = app.get_webview_window("tasks-float") { window.show().map_err(|e| e.to_string())?; window.set_focus().map_err(|e| e.to_string())?; app.emit("task-window-focus", ()) .map_err(|e| e.to_string())?; return Ok(()); } let mut builder = WebviewWindowBuilder::new( &app, "tasks-float", WebviewUrl::App("/float".into()), ) .title("Kon Tasks") .inner_size(480.0, 520.0) .min_inner_size(400.0, 400.0) .always_on_top(true) .decorations(false) .resizable(true); // Inject preferences before Svelte mounts if let Some(script) = app.try_state::() { if !script.0.is_empty() { builder = builder.initialization_script(&script.0); } } builder.build().map_err(|e| e.to_string())?; Ok(()) } /// Open the transcript viewer window. #[tauri::command] pub async fn open_viewer_window( app: tauri::AppHandle, ) -> Result<(), String> { if let Some(window) = app.get_webview_window("transcript-viewer") { window.show().map_err(|e| e.to_string())?; window.set_focus().map_err(|e| e.to_string())?; return Ok(()); } let mut builder = WebviewWindowBuilder::new( &app, "transcript-viewer", WebviewUrl::App("/viewer".into()), ) .title("Kon - Viewer") .inner_size(600.0, 700.0) .min_inner_size(450.0, 500.0) .decorations(false) .resizable(true); // Inject preferences before Svelte mounts if let Some(script) = app.try_state::() { if !script.0.is_empty() { builder = builder.initialization_script(&script.0); } } builder.build().map_err(|e| e.to_string())?; Ok(()) }