mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 17:15:38 +08:00
refactor: remove unnecessary emit calls in switch_proxy_node and enhance profile switch notifications
This commit is contained in:
@@ -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", ());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user