chore: optimize (#5319)

* chore: optimize and reduce spawn

* chore: optimize
This commit is contained in:
oomeow
2025-11-07 06:06:09 +08:00
committed by GitHub
parent 19b3899a1b
commit 81e35e2ead
2 changed files with 34 additions and 61 deletions

View File

@@ -24,8 +24,6 @@ use futures::future::join_all;
use parking_lot::Mutex;
use smartstring::alias::String;
use std::collections::HashMap;
use std::future::Future;
use std::pin::Pin;
use std::sync::Arc;
use std::{
sync::atomic::{AtomicBool, Ordering},
@@ -550,49 +548,34 @@ impl Tray {
let tray = builder.build(app_handle)?;
tray.on_tray_icon_event(|_app_handle, event| {
// 忽略移动、进入和离开等无需处理的事件,避免不必要的刷新
match event {
TrayIconEvent::Move { .. }
| TrayIconEvent::Enter { .. }
| TrayIconEvent::Leave { .. } => {
return;
}
_ => {}
}
if let TrayIconEvent::Click {
button: MouseButton::Left,
button_state: MouseButtonState::Down,
..
} = event
{
AsyncHandler::spawn(|| async move {
let tray_event = { Config::verge().await.latest_arc().tray_event.clone() };
let tray_event: String = tray_event.unwrap_or_else(|| "main_window".into());
logging!(debug, Type::Tray, "tray event: {tray_event:?}");
AsyncHandler::spawn(|| async move {
let tray_event = { Config::verge().await.latest_arc().tray_event.clone() };
let tray_event: String = tray_event.unwrap_or_else(|| "main_window".into());
logging!(debug, Type::Tray, "tray event: {tray_event:?}");
if let TrayIconEvent::Click {
button: MouseButton::Left,
button_state: MouseButtonState::Down,
..
} = event
{
// 添加防抖检查,防止快速连击
if !should_handle_tray_click() {
return;
}
let fut: Pin<Box<dyn Future<Output = ()> + Send>> = match tray_event.as_str() {
"system_proxy" => Box::pin(async move {
feat::toggle_system_proxy().await;
}),
"tun_mode" => Box::pin(async move {
feat::toggle_tun_mode(None).await;
}),
"main_window" => Box::pin(async move {
match tray_event.as_str() {
"system_proxy" => feat::toggle_system_proxy().await,
"tun_mode" => feat::toggle_tun_mode(None).await,
"main_window" => {
if !lightweight::exit_lightweight_mode().await {
WindowManager::show_main_window().await;
};
}),
_ => Box::pin(async move {}),
}
_ => {}
};
fut.await;
}
});
});
}
});
tray.on_menu_event(on_menu_event);
Ok(())