diff --git a/UPDATELOG.md b/UPDATELOG.md index 4a469309..81001152 100644 --- a/UPDATELOG.md +++ b/UPDATELOG.md @@ -16,8 +16,10 @@ - Linux 在系统服务模式下无法拉起 Mihomo 内核 - 使用异步操作,避免获取系统信息和切换代理模式可能带来的崩溃 - 相同节点名称可能导致的页面渲染出错 + - URL Schemes被截断的问题 #### 新增了: + - Mihomo(Meta)内核升级至 1.19.4 - Clash Verge Rev 从现在开始不再强依赖系统服务和管理权限 - 支持根据用户偏好选择Sidecar(用户空间)模式或安装服务 - 增加载入初始配置文件的错误提示,防止切换到错误的订阅配置 @@ -37,6 +39,7 @@ - MacOS 托盘速率更好的显示样式和更新逻辑 - 首页仅在有流量图表时显示流量图表区域 - 更新DNS默认覆写配置 + - 移除测试目录,简化资源初始化逻辑 ## v2.2.2 diff --git a/src-tauri/src/utils/resolve.rs b/src-tauri/src/utils/resolve.rs index b0875a86..b1839c2b 100644 --- a/src-tauri/src/utils/resolve.rs +++ b/src-tauri/src/utils/resolve.rs @@ -293,16 +293,22 @@ pub async fn resolve_scheme(param: String) -> Result<()> { .find(|(key, _)| key == "name") .map(|(_, value)| value.into_owned()); - let encode_url = link_parsed - .query_pairs() - .find(|(key, _)| key == "url") - .map(|(_, value)| value.into_owned()); + // 通过直接获取查询部分并解析特定参数来避免 URL 转义问题 + let url_param = if let Some(query) = link_parsed.query() { + let prefix = "url="; + if let Some(pos) = query.find(prefix) { + let raw_url = &query[pos + prefix.len()..]; + Some(percent_decode_str(raw_url).decode_utf8_lossy().to_string()) + } else { + None + } + } else { + None + }; - match encode_url { + match url_param { Some(url) => { - let url = percent_decode_str(url.as_ref()) - .decode_utf8_lossy() - .to_string(); + log::info!(target:"app", "decoded subscription url: {}", url); create_window(); match PrfItem::from_url(url.as_ref(), name, None, None).await {