resolve.rs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. use crate::log_err;
  2. use crate::{config::VergeN, core::*, utils::init, utils::server};
  3. use tauri::{App, AppHandle, Manager};
  4. /// handle something when start app
  5. pub fn resolve_setup(app: &mut App) {
  6. #[cfg(target_os = "macos")]
  7. app.set_activation_policy(tauri::ActivationPolicy::Accessory);
  8. handle::Handle::global().init(app.app_handle());
  9. init::init_resources(app.package_info());
  10. // 启动核心
  11. log_err!(CoreManager::global().init());
  12. // log_err!(app
  13. // .tray_handle()
  14. // .set_menu(tray::Tray::tray_menu(&app.app_handle())));
  15. log_err!(tray::Tray::update_systray(&app.app_handle()));
  16. // setup a simple http server for singleton
  17. server::embed_server(app.app_handle());
  18. let silent_start = {
  19. let verge = VergeN::global().config.lock();
  20. verge.enable_silent_start.clone()
  21. };
  22. if !silent_start.unwrap_or(false) {
  23. create_window(&app.app_handle());
  24. }
  25. log_err!(sysopt::Sysopt::global().init_launch());
  26. log_err!(sysopt::Sysopt::global().init_sysproxy());
  27. log_err!(handle::Handle::update_systray_part());
  28. log_err!(hotkey::Hotkey::global().init(app.app_handle()));
  29. log_err!(timer::Timer::global().init());
  30. }
  31. /// reset system proxy
  32. pub fn resolve_reset() {
  33. log_err!(sysopt::Sysopt::global().reset_sysproxy());
  34. log_err!(CoreManager::global().stop_core());
  35. }
  36. /// create main window
  37. pub fn create_window(app_handle: &AppHandle) {
  38. if let Some(window) = app_handle.get_window("main") {
  39. let _ = window.unminimize();
  40. let _ = window.show();
  41. let _ = window.set_focus();
  42. return;
  43. }
  44. let builder = tauri::window::WindowBuilder::new(
  45. app_handle,
  46. "main".to_string(),
  47. tauri::WindowUrl::App("index.html".into()),
  48. )
  49. .title("Clash Verge")
  50. .center()
  51. .fullscreen(false)
  52. .min_inner_size(600.0, 520.0);
  53. #[cfg(target_os = "windows")]
  54. {
  55. use crate::utils::winhelp;
  56. use std::time::Duration;
  57. use tokio::time::sleep;
  58. use window_shadows::set_shadow;
  59. use window_vibrancy::apply_blur;
  60. match builder
  61. .decorations(false)
  62. .transparent(true)
  63. .inner_size(800.0, 636.0)
  64. .build()
  65. {
  66. Ok(_) => {
  67. let app_handle = app_handle.clone();
  68. tauri::async_runtime::spawn(async move {
  69. sleep(Duration::from_secs(1)).await;
  70. if let Some(window) = app_handle.get_window("main") {
  71. let _ = window.show();
  72. let _ = set_shadow(&window, true);
  73. if !winhelp::is_win11() {
  74. let _ = apply_blur(&window, None);
  75. }
  76. }
  77. });
  78. }
  79. Err(err) => log::error!(target: "app", "{err}"),
  80. }
  81. }
  82. #[cfg(target_os = "macos")]
  83. crate::log_if_err!(builder.decorations(true).inner_size(800.0, 642.0).build());
  84. #[cfg(target_os = "linux")]
  85. crate::log_if_err!(builder
  86. .decorations(false)
  87. .transparent(true)
  88. .inner_size(800.0, 636.0)
  89. .build());
  90. }