rust format

This commit is contained in:
Kasserrr
2025-08-30 02:23:16 +08:00
Unverified
parent 3424133e9e
commit 1916e53995
2 changed files with 76 additions and 48 deletions

View File

@@ -1,7 +1,13 @@
use tauri::Emitter; use tauri::Emitter;
use super::CmdResult; use super::CmdResult;
use crate::{core::{handle::Handle, tray::Tray}, ipc::IpcManager, logging, state::proxy::ProxyRequestCache, utils::logging::Type}; use crate::{
core::{handle::Handle, tray::Tray},
ipc::IpcManager,
logging,
state::proxy::ProxyRequestCache,
utils::logging::Type,
};
use std::time::Duration; use std::time::Duration;
const PROXIES_REFRESH_INTERVAL: Duration = Duration::from_secs(60); const PROXIES_REFRESH_INTERVAL: Duration = Duration::from_secs(60);
@@ -68,11 +74,15 @@ pub async fn sync_tray_proxy_selection() -> CmdResult<()> {
/// 更新代理选择并同步托盘和GUI状态 /// 更新代理选择并同步托盘和GUI状态
#[tauri::command] #[tauri::command]
pub async fn update_proxy_and_sync(group: String, proxy: String) -> CmdResult<()> { pub async fn update_proxy_and_sync(group: String, proxy: String) -> CmdResult<()> {
match IpcManager::global().update_proxy(&group, &proxy).await { match IpcManager::global().update_proxy(&group, &proxy).await {
Ok(_) => { Ok(_) => {
logging!(info, Type::Cmd, "Proxy updated successfully: {} -> {}", group, proxy); logging!(
info,
Type::Cmd,
"Proxy updated successfully: {} -> {}",
group,
proxy
);
let cache = crate::state::proxy::ProxyRequestCache::global(); let cache = crate::state::proxy::ProxyRequestCache::global();
let key = crate::state::proxy::ProxyRequestCache::make_key("proxies", "default"); let key = crate::state::proxy::ProxyRequestCache::make_key("proxies", "default");
@@ -87,11 +97,24 @@ pub async fn update_proxy_and_sync(group: String, proxy: String) -> CmdResult<()
let _ = app_handle.emit("verge://refresh-proxy-config", ()); let _ = app_handle.emit("verge://refresh-proxy-config", ());
} }
logging!(info, Type::Cmd, "Proxy and sync completed successfully: {} -> {}", group, proxy); logging!(
info,
Type::Cmd,
"Proxy and sync completed successfully: {} -> {}",
group,
proxy
);
Ok(()) Ok(())
} }
Err(e) => { Err(e) => {
logging!(error, Type::Cmd, "Failed to update proxy: {} -> {}, error: {}", group, proxy, e); logging!(
error,
Type::Cmd,
"Failed to update proxy: {} -> {}, error: {}",
group,
proxy,
e
);
Err(e.to_string()) Err(e.to_string())
} }
} }

View File

@@ -8,8 +8,9 @@ use crate::process::AsyncHandler;
use crate::{ use crate::{
cmd, cmd,
config::Config, config::Config,
feat, logging, feat,
ipc::IpcManager, ipc::IpcManager,
logging,
module::lightweight::is_in_lightweight_mode, module::lightweight::is_in_lightweight_mode,
singleton_lazy, singleton_lazy,
utils::{dirs::find_target_icons, i18n::t, resolve::VERSION}, utils::{dirs::find_target_icons, i18n::t, resolve::VERSION},
@@ -70,7 +71,6 @@ pub struct Tray {
} }
impl TrayState { impl TrayState {
pub async fn get_common_tray_icon() -> (bool, Vec<u8>) { pub async fn get_common_tray_icon() -> (bool, Vec<u8>) {
let verge = Config::verge().await.latest_ref().clone(); let verge = Config::verge().await.latest_ref().clone();
let is_common_tray_icon = verge.common_tray_icon.unwrap_or(false); let is_common_tray_icon = verge.common_tray_icon.unwrap_or(false);
@@ -139,7 +139,6 @@ impl TrayState {
include_bytes!("../../../icons/tray-icon-sys.ico").to_vec(), include_bytes!("../../../icons/tray-icon-sys.ico").to_vec(),
) )
} }
} }
pub async fn get_tun_tray_icon() -> (bool, Vec<u8>) { pub async fn get_tun_tray_icon() -> (bool, Vec<u8>) {
@@ -175,10 +174,8 @@ impl TrayState {
) )
} }
} }
} }
impl Default for Tray { impl Default for Tray {
fn default() -> Self { fn default() -> Self {
Tray { Tray {
@@ -263,7 +260,6 @@ impl Tray {
} }
async fn update_menu_internal(&self, app_handle: &AppHandle) -> Result<()> { async fn update_menu_internal(&self, app_handle: &AppHandle) -> Result<()> {
let verge = Config::verge().await.latest_ref().clone(); let verge = Config::verge().await.latest_ref().clone();
let system_proxy = verge.enable_system_proxy.as_ref().unwrap_or(&false); let system_proxy = verge.enable_system_proxy.as_ref().unwrap_or(&false);
let tun_mode = verge.enable_tun_mode.as_ref().unwrap_or(&false); let tun_mode = verge.enable_tun_mode.as_ref().unwrap_or(&false);
@@ -315,7 +311,6 @@ impl Tray {
Ok(()) Ok(())
} }
} }
} }
/// 更新托盘图标 /// 更新托盘图标
@@ -573,7 +568,6 @@ impl Tray {
Ok(()) Ok(())
} }
} }
async fn create_tray_menu( async fn create_tray_menu(
@@ -655,9 +649,11 @@ async fn create_tray_menu(
// 解析代理组数据,创建分层菜单结构 // 解析代理组数据,创建分层菜单结构
if let Some(proxies) = proxy_nodes_data.get("proxies").and_then(|v| v.as_object()) { if let Some(proxies) = proxy_nodes_data.get("proxies").and_then(|v| v.as_object()) {
for (group_name, group_data) in proxies.iter() { for (group_name, group_data) in proxies.iter() {
if let (Some(group_type),Some(all_proxies)) = (group_data.get("type").and_then(|v| v.as_str()),group_data.get("all").and_then(|v| v.as_array())) { if let (Some(group_type), Some(all_proxies)) = (
group_data.get("type").and_then(|v| v.as_str()),
group_data.get("all").and_then(|v| v.as_array()),
) {
// 在全局模式下只显示GLOBAL组在规则模式下显示所有Selector类型的代理组 // 在全局模式下只显示GLOBAL组在规则模式下显示所有Selector类型的代理组
let should_show_group = if mode == "global" { let should_show_group = if mode == "global" {
group_name == "GLOBAL" group_name == "GLOBAL"
@@ -681,7 +677,7 @@ async fn create_tray_menu(
match CheckMenuItem::with_id( match CheckMenuItem::with_id(
app_handle, app_handle,
item_id, item_id,
proxy_str, // 只显示节点名,不显示组名前缀 proxy_str, // 只显示节点名,不显示组名前缀
true, true,
is_selected, is_selected,
None::<&str>, None::<&str>,
@@ -709,9 +705,9 @@ async fn create_tray_menu(
} else { } else {
// 规则模式下:只对用户在当前配置中手动选择过的代理组显示勾选 // 规则模式下:只对用户在当前配置中手动选择过的代理组显示勾选
// 这些组表示用户真正关心和使用的代理组 // 这些组表示用户真正关心和使用的代理组
let is_user_selected = current_profile_selected.iter().any(|selected| { let is_user_selected = current_profile_selected
selected.name.as_deref() == Some(group_name) .iter()
}); .any(|selected| selected.name.as_deref() == Some(group_name));
is_user_selected && !now_proxy.is_empty() is_user_selected && !now_proxy.is_empty()
}; };
@@ -725,7 +721,7 @@ async fn create_tray_menu(
match Submenu::with_id_and_items( match Submenu::with_id_and_items(
app_handle, app_handle,
format!("proxy_group_{}", group_name), format!("proxy_group_{}", group_name),
group_display_name, // 使用带勾选标记的组名 group_display_name, // 使用带勾选标记的组名
true, true,
&group_items_refs, &group_items_refs,
) { ) {
@@ -740,7 +736,6 @@ async fn create_tray_menu(
submenus submenus
}; };
// Pre-fetch all localized strings // Pre-fetch all localized strings
let dashboard_text = t("Dashboard").await; let dashboard_text = t("Dashboard").await;
let rule_mode_text = t("Rule Mode").await; let rule_mode_text = t("Rule Mode").await;
@@ -1049,14 +1044,22 @@ fn on_menu_event(_: &AppHandle, event: MenuEvent) {
.to_owned() .to_owned()
}; };
match cmd::proxy::update_proxy_and_sync(group_name.to_string(), proxy_name.to_string()).await { match cmd::proxy::update_proxy_and_sync(
group_name.to_string(),
proxy_name.to_string(),
)
.await
{
Ok(_) => { Ok(_) => {
log::info!(target: "app", " {} -> {} (模式: {})", group_name, proxy_name, current_mode); log::info!(target: "app", " {} -> {} (模式: {})", group_name, proxy_name, current_mode);
} }
Err(e) => { Err(e) => {
log::error!(target: "app", " {} -> {}, 错误: {:?}", group_name, proxy_name, e); log::error!(target: "app", " {} -> {}, 错误: {:?}", group_name, proxy_name, e);
match IpcManager::global().update_proxy(group_name, proxy_name).await { match IpcManager::global()
.update_proxy(group_name, proxy_name)
.await
{
Ok(_) => { Ok(_) => {
log::info!(target: "app", " {} -> {}", group_name, proxy_name); log::info!(target: "app", " {} -> {}", group_name, proxy_name);
@@ -1064,8 +1067,10 @@ fn on_menu_event(_: &AppHandle, event: MenuEvent) {
log::warn!(target: "app", "托盘菜单更新失败: {e}"); log::warn!(target: "app", "托盘菜单更新失败: {e}");
} }
if let Some(app_handle) = handle::Handle::global().app_handle() { if let Some(app_handle) = handle::Handle::global().app_handle()
let _ = app_handle.emit("verge://force-refresh-proxies", ()); {
let _ =
app_handle.emit("verge://force-refresh-proxies", ());
let _ = app_handle.emit("verge://refresh-proxy-config", ()); let _ = app_handle.emit("verge://refresh-proxy-config", ());
} }
} }