resolve.rs 3.0 KB

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