refactor: remove unnecessary emit calls in switch_proxy_node and enhance profile switch notifications

This commit is contained in:
Tunglies
2025-11-06 00:30:43 +08:00
parent 6eaf999240
commit 21de5cbb0b
2 changed files with 75 additions and 47 deletions

View File

@@ -60,7 +60,6 @@ pub async fn switch_proxy_node(group_name: &str, proxy_name: &str) {
group_name, group_name,
proxy_name proxy_name
); );
let _ = handle::Handle::app_handle().emit("verge://force-refresh-proxies", ());
let _ = tray::Tray::global().update_menu().await; let _ = tray::Tray::global().update_menu().await;
} }
Err(err) => { Err(err) => {
@@ -72,7 +71,6 @@ pub async fn switch_proxy_node(group_name: &str, proxy_name: &str) {
proxy_name, proxy_name,
err err
); );
let _ = handle::Handle::app_handle().emit("verge://force-refresh-proxies", ());
} }
} }
} }

View File

@@ -4,9 +4,9 @@ use smartstring::alias::String;
use tauri::Url; use tauri::Url;
use crate::{ use crate::{
config::{PrfItem, profiles}, config::{Config, PrfItem, profiles},
core::handle, core::handle,
logging, logging_error, logging,
utils::logging::Type, utils::logging::Type,
}; };
@@ -29,57 +29,87 @@ pub(super) async fn resolve_scheme(param: &str) -> Result<()> {
} }
}; };
if link_parsed.scheme() == "clash" || link_parsed.scheme() == "clash-verge" { let (url_param, name) =
let name_owned: Option<String> = link_parsed if link_parsed.scheme() == "clash" || link_parsed.scheme() == "clash-verge" {
.query_pairs() let name_owned: Option<String> = link_parsed
.find(|(key, _)| key == "name") .query_pairs()
.map(|(_, value)| value.into_owned().into()); .find(|(key, _)| key == "name")
let name = name_owned.as_ref(); .map(|(_, value)| value.into_owned().into());
let name = name_owned.to_owned();
let url_param = if let Some(query) = link_parsed.query() { let url_param = if let Some(query) = link_parsed.query() {
let prefix = "url="; let prefix = "url=";
if let Some(pos) = query.find(prefix) { if let Some(pos) = query.find(prefix) {
let raw_url = &query[pos + prefix.len()..]; let raw_url = &query[pos + prefix.len()..];
Some(percent_decode_str(raw_url).decode_utf8_lossy().to_string()) Some(percent_decode_str(raw_url).decode_utf8_lossy().to_string())
} else {
None
}
} else { } else {
None None
} };
(url_param, name)
} else { } else {
None (None, None)
}; };
match url_param { let url = if let Some(ref url) = url_param {
Some(ref url) => { url
logging!(info, Type::Config, "decoded subscription url: {url}"); } else {
match PrfItem::from_url(url.as_ref(), name, None, None).await { logging!(
Ok(mut item) => { error,
let uid = match item.uid.clone() { Type::Config,
Some(uid) => uid, "missing url parameter in deep link: {}",
None => { param_str
logging!(error, Type::Config, "Profile item missing UID"); );
handle::Handle::notice_message( return Ok(());
"import_sub_url::error", };
"Profile item missing UID".to_string(),
); let mut item = match PrfItem::from_url(url, name.as_ref(), None, None).await {
return Ok(()); Ok(item) => item,
} Err(e) => {
}; logging!(
let result = profiles::profiles_append_item_safe(&mut item).await; error,
logging_error!( Type::Config,
Type::Config, "failed to parse profile from url: {:?}",
"failed to import subscription url: {:?}", e
result );
); // TODO 通知系统疑似损坏,前端无法显示通知事件
handle::Handle::notice_message("import_sub_url::ok", uid); handle::Handle::notice_message("import_sub_url::error", e.to_string());
} return Ok(());
Err(e) => { }
handle::Handle::notice_message("import_sub_url::error", e.to_string()); };
}
} let uid = item.uid.clone().unwrap_or_default();
} // TODO 通过 deep link 导入后需要正确调用前端刷新订阅页面,以及通知结果
None => bail!("failed to get profile url"), match profiles::profiles_append_item_safe(&mut item).await {
Ok(_) => {
Config::profiles().await.apply();
let _ = Config::profiles().await.data_arc().save_file().await;
// TODO 通知系统疑似损坏,前端无法显示通知事件
handle::Handle::notice_message(
"import_sub_url::ok",
item.uid.clone().unwrap_or_default(),
);
// TODO fuck me this shit is fucking broken as fucked
handle::Handle::notify_profile_changed(uid);
}
Err(e) => {
logging!(
error,
Type::Config,
"failed to import subscription url: {:?}",
e
);
Config::profiles().await.discard();
// TODO 通知系统疑似损坏,前端无法显示通知事件
handle::Handle::notice_message("import_sub_url::error", e.to_string());
return Ok(());
} }
} }
handle::Handle::refresh_verge();
handle::Handle::refresh_clash();
Ok(()) Ok(())
} }