153 lines
5.1 KiB
Rust
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");
|
|
}
|