123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- #![cfg_attr(
- all(not(debug_assertions), target_os = "windows"),
- windows_subsystem = "windows"
- )]
- mod cmds;
- mod config;
- mod core;
- mod enhance;
- mod feat;
- mod utils;
- use crate::utils::{init, resolve, server};
- use tauri::{api, SystemTray};
- fn main() -> std::io::Result<()> {
- // 单例检测
- let app_exists: bool = tauri::async_runtime::block_on(async move {
- if server::check_singleton().await.is_err() {
- println!("app exists");
- true
- } else {
- false
- }
- });
- if app_exists {
- return Ok(());
- }
- #[cfg(target_os = "linux")]
- std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1");
- crate::log_err!(init::init_config());
- #[allow(unused_mut)]
- let mut builder = tauri::Builder::default()
- .system_tray(SystemTray::new())
- .setup(|app| {
- tauri::async_runtime::block_on(async move {
- resolve::resolve_setup(app).await;
- });
- Ok(())
- })
- .on_system_tray_event(core::tray::Tray::on_system_tray_event)
- .invoke_handler(tauri::generate_handler![
- // common
- cmds::get_sys_proxy,
- cmds::get_auto_proxy,
- cmds::open_app_dir,
- cmds::open_logs_dir,
- cmds::open_web_url,
- cmds::open_core_dir,
- cmds::get_portable_flag,
- // cmds::kill_sidecar,
- cmds::restart_sidecar,
- // clash
- cmds::get_clash_info,
- cmds::get_clash_logs,
- cmds::patch_clash_config,
- cmds::change_clash_core,
- cmds::get_runtime_config,
- cmds::get_runtime_yaml,
- cmds::get_runtime_exists,
- cmds::get_runtime_logs,
- cmds::uwp::invoke_uwp_tool,
- // verge
- cmds::get_verge_config,
- cmds::patch_verge_config,
- cmds::test_delay,
- cmds::get_app_dir,
- cmds::copy_icon_file,
- cmds::download_icon_cache,
- cmds::open_devtools,
- cmds::exit_app,
- // cmds::update_hotkeys,
- // profile
- cmds::get_profiles,
- cmds::enhance_profiles,
- cmds::patch_profiles_config,
- cmds::view_profile,
- cmds::patch_profile,
- cmds::create_profile,
- cmds::import_profile,
- cmds::reorder_profile,
- cmds::update_profile,
- cmds::delete_profile,
- cmds::read_profile_file,
- cmds::save_profile_file,
- // service mode
- cmds::service::check_service,
- cmds::service::install_service,
- cmds::service::uninstall_service,
- // clash api
- cmds::clash_api_get_proxy_delay
- ]);
- #[cfg(target_os = "macos")]
- {
- use tauri::{Menu, MenuItem, Submenu};
- builder = builder.menu(
- Menu::new().add_submenu(Submenu::new(
- "Edit",
- Menu::new()
- .add_native_item(MenuItem::Undo)
- .add_native_item(MenuItem::Redo)
- .add_native_item(MenuItem::Copy)
- .add_native_item(MenuItem::Paste)
- .add_native_item(MenuItem::Cut)
- .add_native_item(MenuItem::SelectAll)
- .add_native_item(MenuItem::CloseWindow)
- .add_native_item(MenuItem::Quit),
- )),
- );
- }
- let app = builder
- .build(tauri::generate_context!())
- .expect("error while running tauri application");
- app.run(|app_handle, e| match e {
- tauri::RunEvent::ExitRequested { api, .. } => {
- api.prevent_exit();
- }
- tauri::RunEvent::Updater(tauri::UpdaterEvent::Downloaded) => {
- resolve::resolve_reset();
- api::process::kill_children();
- }
- tauri::RunEvent::WindowEvent { label, event, .. } => {
- if label == "main" {
- match event {
- tauri::WindowEvent::Destroyed => {
- let _ = resolve::save_window_size_position(app_handle, true);
- }
- tauri::WindowEvent::CloseRequested { .. } => {
- let _ = resolve::save_window_size_position(app_handle, true);
- }
- tauri::WindowEvent::Moved(_) | tauri::WindowEvent::Resized(_) => {
- let _ = resolve::save_window_size_position(app_handle, false);
- }
- _ => {}
- }
- }
- }
- _ => {}
- });
- Ok(())
- }
|