diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 38f1bae..ff3d3aa 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -21,7 +21,6 @@ use crate::{ use std::sync::{Arc, Mutex}; use tauri::{ api, CustomMenuItem, Manager, SystemTray, SystemTrayEvent, SystemTrayMenu, SystemTrayMenuItem, - SystemTraySubmenu, }; fn main() -> std::io::Result<()> { @@ -30,23 +29,34 @@ fn main() -> std::io::Result<()> { return Ok(()); } - let sub_menu = SystemTraySubmenu::new( - "出站规则", - SystemTrayMenu::new() - .add_item(CustomMenuItem::new("rway_global", "全局连接")) - .add_item(CustomMenuItem::new("rway_rule", "规则连接").selected()) - .add_item(CustomMenuItem::new("rway_direct", "直接连接")), - ); let menu = SystemTrayMenu::new() - .add_submenu(sub_menu) - .add_native_item(SystemTrayMenuItem::Separator) - .add_item(CustomMenuItem::new("syste_proxy", "设置为系统代理")) - .add_item(CustomMenuItem::new("self_startup", "开机启动").selected()) .add_item(CustomMenuItem::new("open_window", "显示应用")) .add_native_item(SystemTrayMenuItem::Separator) .add_item(CustomMenuItem::new("quit", "退出").accelerator("CmdOrControl+Q")); - let app = tauri::Builder::default() + tauri::Builder::default() + .setup(|app| { + // a simple http server + embed_server(&app.handle()); + + // init app config + utils::init::init_app(app.package_info()); + // run clash sidecar + let info = utils::clash::run_clash_bin(&app.handle()); + // update the profile + let info_copy = info.clone(); + tauri::async_runtime::spawn(async move { + match put_clash_profile(&info_copy).await { + Ok(_) => {} + Err(err) => log::error!("failed to put config for `{}`", err), + }; + }); + + app.manage(state::VergeConfLock(Arc::new(Mutex::new(read_verge())))); + app.manage(state::ClashInfoState(Arc::new(Mutex::new(info)))); + app.manage(state::ProfileLock::default()); + Ok(()) + }) .system_tray(SystemTray::new().with_menu(menu)) .on_system_tray_event(move |app, event| match event { SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() { @@ -83,42 +93,21 @@ fn main() -> std::io::Result<()> { cmds::profile::put_profiles, ]) .build(tauri::generate_context!()) - .expect("error while running tauri application"); - - // a simple http server - embed_server(&app.handle()); - - // init app config - utils::init::init_app(app.package_info()); - // run clash sidecar - let info = utils::clash::run_clash_bin(&app.handle()); - // update the profile - let info_copy = info.clone(); - tauri::async_runtime::spawn(async move { - match put_clash_profile(&info_copy).await { - Ok(_) => {} - Err(err) => log::error!("failed to put config for `{}`", err), - }; - }); - - app.manage(state::VergeConfLock(Arc::new(Mutex::new(read_verge())))); - app.manage(state::ClashInfoState(Arc::new(Mutex::new(info)))); - app.manage(state::ProfileLock::default()); - - app.run(|app_handle, e| match e { - tauri::Event::CloseRequested { label, api, .. } => { - let app_handle = app_handle.clone(); - api.prevent_close(); - app_handle.get_window(&label).unwrap().hide().unwrap(); - } - tauri::Event::ExitRequested { api, .. } => { - api.prevent_exit(); - } - tauri::Event::Exit => { - api::process::kill_children(); - } - _ => {} - }); + .expect("error while running tauri application") + .run(|app_handle, e| match e { + tauri::Event::CloseRequested { label, api, .. } => { + let app_handle = app_handle.clone(); + api.prevent_close(); + app_handle.get_window(&label).unwrap().hide().unwrap(); + } + tauri::Event::ExitRequested { api, .. } => { + api.prevent_exit(); + } + tauri::Event::Exit => { + api::process::kill_children(); + } + _ => {} + }); Ok(()) }