diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 02d544df..7684590b 100755 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -83,3 +83,7 @@ strip = true [profile.dev] incremental = true + +[lib] +name = "app_lib" +crate-type = ["staticlib", "cdylib", "rlib"] diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs new file mode 100644 index 00000000..a7ff14d7 --- /dev/null +++ b/src-tauri/src/lib.rs @@ -0,0 +1,148 @@ +mod cmds; +mod config; +mod core; +mod enhance; +mod feat; +mod utils; + +use crate::utils::{resolve, resolve::resolve_scheme, server}; +use tauri::Listener; + +pub fn run() { + // 单例检测 + 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; + } + + #[cfg(target_os = "linux")] + std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); + + #[cfg(debug_assertions)] + let devtools = tauri_plugin_devtools::init(); + + #[allow(unused_mut)] + let mut builder = tauri::Builder::default() + .plugin(tauri_plugin_updater::Builder::new().build()) + .plugin(tauri_plugin_clipboard_manager::init()) + .plugin(tauri_plugin_process::init()) + .plugin(tauri_plugin_global_shortcut::Builder::new().build()) + .plugin(tauri_plugin_notification::init()) + .plugin(tauri_plugin_fs::init()) + .plugin(tauri_plugin_dialog::init()) + .plugin(tauri_plugin_shell::init()) + .plugin(tauri_plugin_deep_link::init()) + .setup(|app| { + #[cfg(target_os = "linux")] + { + use tauri_plugin_deep_link::DeepLinkExt; + app.deep_link().register_all()?; + } + + app.listen("deep-link://new-url", |event| { + tauri::async_runtime::spawn(async move { + let payload = event.payload(); + log_err!(resolve_scheme(payload.to_string()).await); + }); + }); + + tauri::async_runtime::block_on(async move { + resolve::resolve_setup(app).await; + }); + + Ok(()) + }) + .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::get_network_interfaces, + // 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, + cmds::copy_clash_env, + // 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::get_network_interfaces_info, + // 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(debug_assertions)] + { + builder = builder.plugin(devtools); + } + + 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::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); + } + _ => {} + } + } + } + _ => {} + }); +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index ca5cb108..293b1b22 100755 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,155 +1,4 @@ -#![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::{resolve, resolve::resolve_scheme, server}; -use tauri::Listener; - -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"); - - #[cfg(debug_assertions)] - let devtools = tauri_plugin_devtools::init(); - - #[allow(unused_mut)] - let mut builder = tauri::Builder::default() - .plugin(tauri_plugin_updater::Builder::new().build()) - .plugin(tauri_plugin_clipboard_manager::init()) - .plugin(tauri_plugin_process::init()) - .plugin(tauri_plugin_global_shortcut::Builder::new().build()) - .plugin(tauri_plugin_notification::init()) - .plugin(tauri_plugin_fs::init()) - .plugin(tauri_plugin_dialog::init()) - .plugin(tauri_plugin_shell::init()) - .plugin(tauri_plugin_deep_link::init()) - .setup(|app| { - #[cfg(target_os = "linux")] - { - use tauri_plugin_deep_link::DeepLinkExt; - app.deep_link().register_all()?; - } - - app.listen("deep-link://new-url", |event| { - tauri::async_runtime::spawn(async move { - let payload = event.payload(); - log_err!(resolve_scheme(payload.to_string()).await); - }); - }); - - tauri::async_runtime::block_on(async move { - resolve::resolve_setup(app).await; - }); - - Ok(()) - }) - .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::get_network_interfaces, - // 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, - cmds::copy_clash_env, - // 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::get_network_interfaces_info, - // 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(debug_assertions)] - { - builder = builder.plugin(devtools); - } - - 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::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(()) +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] +fn main() { + app_lib::run(); }