mod credentials; mod updates; use tauri::menu::{Menu, MenuItem, PredefinedMenuItem, Submenu}; use tauri::{Emitter, Manager, Runtime}; const DESKTOP_MENU_COMMAND_EVENT: &str = "ctms:desktop-menu-command"; fn desktop_menu(handle: &tauri::AppHandle) -> tauri::Result> { Menu::with_items( handle, &[ &Submenu::with_items( handle, "文件", true, &[ &MenuItem::with_id( handle, "ctms.desktop.commandPalette", "打开命令面板", true, Some("CmdOrCtrl+K"), )?, &MenuItem::with_id( handle, "ctms.desktop.serverSettings", "服务器设置", true, None::<&str>, )?, &PredefinedMenuItem::separator(handle)?, &PredefinedMenuItem::close_window(handle, None)?, &PredefinedMenuItem::quit(handle, None)?, ], )?, &Submenu::with_items( handle, "编辑", true, &[ &PredefinedMenuItem::undo(handle, None)?, &PredefinedMenuItem::redo(handle, None)?, &PredefinedMenuItem::separator(handle)?, &PredefinedMenuItem::cut(handle, None)?, &PredefinedMenuItem::copy(handle, None)?, &PredefinedMenuItem::paste(handle, None)?, &PredefinedMenuItem::select_all(handle, None)?, ], )?, &Submenu::with_items( handle, "视图", true, &[ &MenuItem::with_id( handle, "ctms.desktop.refresh", "刷新当前视图", true, Some("CmdOrCtrl+R"), )?, &PredefinedMenuItem::fullscreen(handle, None)?, ], )?, &Submenu::with_items( handle, "导航", true, &[ &MenuItem::with_id( handle, "ctms.desktop.back", "返回", true, Some("CmdOrCtrl+["), )?, &MenuItem::with_id( handle, "ctms.desktop.forward", "前进", true, Some("CmdOrCtrl+]"), )?, ], )?, &Submenu::with_items( handle, "窗口", true, &[ &PredefinedMenuItem::minimize(handle, None)?, &PredefinedMenuItem::maximize(handle, None)?, &PredefinedMenuItem::close_window(handle, None)?, ], )?, &Submenu::with_items( handle, "帮助", true, &[ &MenuItem::with_id( handle, "ctms.desktop.preferences", "桌面偏好", true, Some("CmdOrCtrl+,"), )?, ], )?, ], ) } fn emit_menu_command(app: &tauri::AppHandle, command: &str) { if let Some(window) = app.get_webview_window("main") { let _ = window.emit(DESKTOP_MENU_COMMAND_EVENT, command); } } pub fn run() { tauri::Builder::default() .menu(desktop_menu) .on_menu_event(|app, event| { let command = event.id().as_ref(); if command.starts_with("ctms.desktop.") { emit_menu_command(app, command); } }) .plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| { if let Some(window) = app.get_webview_window("main") { let _ = window.unminimize(); let _ = window.show(); let _ = window.set_focus(); } })) .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_fs::init()) .plugin(tauri_plugin_notification::init()) .plugin(tauri_plugin_opener::init()) .plugin(tauri_plugin_updater::Builder::new().build()) .manage(updates::PendingUpdate::default()) .invoke_handler(tauri::generate_handler![ credentials::credential_get, credentials::credential_set, credentials::credential_delete, updates::desktop_update_check, updates::desktop_update_install, ]) .run(tauri::generate_context!()) .expect("error while running CTMS desktop application"); }