- lib.rs rewritten from scaffold to full app setup (~70 lines) - AppState holds Arc<LocalEngine> for Whisper and Parakeet - commands/models.rs: download, check, list, load for both engines Maps legacy size strings (Tiny/Base/Small/Medium) to ModelId - commands/transcription.rs: transcribe_pcm, transcribe_file, transcribe_pcm_parakeet Delegates to LocalEngine.transcribe_sync() + post_process_segments() - commands/audio.rs: save_audio via kon_audio::write_wav - commands/windows.rs: open_task_window, open_viewer_window - commands/llm.rs: 8 stub commands preserved for frontend compatibility - tray.rs: extracted system tray setup (show, status, quit, click-to-show) - Close-to-tray behaviour preserved - All 25 v0.2 command names preserved for Svelte frontend compatibility - clippy clean Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
60 lines
1.7 KiB
Rust
60 lines
1.7 KiB
Rust
use tauri::image::Image;
|
|
use tauri::menu::{MenuBuilder, MenuItemBuilder};
|
|
use tauri::tray::TrayIconBuilder;
|
|
use tauri::Manager;
|
|
|
|
pub fn setup(app: &tauri::App) -> Result<(), Box<dyn std::error::Error>> {
|
|
let show = MenuItemBuilder::with_id("show", "Show Kon").build(app)?;
|
|
let status = MenuItemBuilder::with_id("status", "Ready")
|
|
.enabled(false)
|
|
.build(app)?;
|
|
let quit = MenuItemBuilder::with_id("quit", "Quit").build(app)?;
|
|
|
|
let menu = MenuBuilder::new(app)
|
|
.item(&show)
|
|
.separator()
|
|
.item(&status)
|
|
.separator()
|
|
.item(&quit)
|
|
.build()?;
|
|
|
|
let icon = app
|
|
.default_window_icon()
|
|
.cloned()
|
|
.unwrap_or_else(|| Image::new(&[0u8; 4], 1, 1));
|
|
|
|
let _tray = TrayIconBuilder::new()
|
|
.icon(icon)
|
|
.tooltip("Kon — Ready")
|
|
.menu(&menu)
|
|
.on_menu_event(move |app, event| match event.id().as_ref() {
|
|
"show" => {
|
|
if let Some(window) = app.get_webview_window("main") {
|
|
let _ = window.show();
|
|
let _ = window.set_focus();
|
|
}
|
|
}
|
|
"quit" => {
|
|
app.exit(0);
|
|
}
|
|
_ => {}
|
|
})
|
|
.on_tray_icon_event(|tray, event| {
|
|
if let tauri::tray::TrayIconEvent::Click {
|
|
button: tauri::tray::MouseButton::Left,
|
|
..
|
|
} = event
|
|
{
|
|
if let Some(window) =
|
|
tray.app_handle().get_webview_window("main")
|
|
{
|
|
let _ = window.show();
|
|
let _ = window.set_focus();
|
|
}
|
|
}
|
|
})
|
|
.build(app)?;
|
|
|
|
Ok(())
|
|
}
|