use crate::{core::Core, data::Data, utils::init, utils::server}; use tauri::{App, AppHandle, Manager}; /// handle something when start app pub fn resolve_setup(app: &App) { // init app config init::init_app(app.package_info()); let silent_start = { let global = Data::global(); let verge = global.verge.lock(); let singleton = verge.app_singleton_port.clone(); // setup a simple http server for singleton server::embed_server(&app.handle(), singleton); verge.enable_silent_start.clone().unwrap_or(false) }; // core should be initialized after init_app fix #122 let core = Core::global(); core.init(app.app_handle()); if !silent_start || cfg!(target_os = "macos") { create_window(&app.app_handle()); } } /// reset system proxy pub fn resolve_reset() { let core = Core::global(); let mut sysopt = core.sysopt.lock(); crate::log_if_err!(sysopt.reset_sysproxy()); drop(sysopt); let mut service = core.service.lock(); crate::log_if_err!(service.stop()); } /// create main window pub fn create_window(app_handle: &AppHandle) { if let Some(window) = app_handle.get_window("main") { let _ = window.unminimize(); let _ = window.show(); let _ = window.set_focus(); return; } let builder = tauri::window::WindowBuilder::new( app_handle, "main".to_string(), tauri::WindowUrl::App("index.html".into()), ) .title("Clash Verge") .center() .fullscreen(false) .min_inner_size(600.0, 520.0); #[cfg(target_os = "windows")] { use crate::utils::winhelp; use std::time::Duration; use tokio::time::sleep; use window_shadows::set_shadow; use window_vibrancy::apply_blur; match builder .decorations(false) .transparent(true) .inner_size(800.0, 636.0) .build() { Ok(_) => { let app_handle = app_handle.clone(); tauri::async_runtime::spawn(async move { sleep(Duration::from_secs(1)).await; if let Some(window) = app_handle.get_window("main") { let _ = window.show(); let _ = set_shadow(&window, true); if !winhelp::is_win11() { let _ = apply_blur(&window, None); } } }); } Err(err) => log::error!(target: "app", "{err}"), } } #[cfg(target_os = "macos")] crate::log_if_err!(builder.decorations(true).inner_size(800.0, 642.0).build()); #[cfg(target_os = "linux")] crate::log_if_err!(builder .decorations(false) .transparent(true) .inner_size(800.0, 636.0) .build()); }