Files
ctms/frontend/src-tauri/src/lib.rs
T
2026-06-30 22:26:34 +08:00

153 lines
5.1 KiB
Rust

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<R: Runtime>(handle: &tauri::AppHandle<R>) -> tauri::Result<Menu<R>> {
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<R: Runtime>(app: &tauri::AppHandle<R>, 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");
}