From c40cdf6b550373aeb17e9a29bd037ce4380cf8ee Mon Sep 17 00:00:00 2001 From: Slinetrac Date: Sun, 28 Dec 2025 10:55:27 +0800 Subject: [PATCH] fix(seq): prepend newly added proxies to first selector group --- Changelog.md | 2 +- src-tauri/src/enhance/seq.rs | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Changelog.md b/Changelog.md index 7f774615e..00922b91f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -29,6 +29,6 @@ - 在 Linux NVIDIA 显卡环境下尝试禁用 WebKit DMABUF 渲染以规避潜在问题 - Windows 下自启动改为计划任务实现 - 改进托盘和窗口操作频率限制实现 -- 使用「编辑节点」添加节点时,自动将节点添加到第一个 `select` 类型的代理组末尾 +- 使用「编辑节点」添加节点时,自动将节点添加到第一个 `select` 类型的代理组的第一位 diff --git a/src-tauri/src/enhance/seq.rs b/src-tauri/src/enhance/seq.rs index 66c1f106d..6db61b14f 100644 --- a/src-tauri/src/enhance/seq.rs +++ b/src-tauri/src/enhance/seq.rs @@ -100,17 +100,24 @@ pub fn use_seq(seq: SeqMap, mut config: Mapping, field: &str) -> Mapping { }); if !appended_to_selector && !added_proxy_names.is_empty() && is_selector_group(group_map) { - let mut seq = proxies_seq.unwrap_or_else(Sequence::new); - let mut existing = seq - .iter() - .filter_map(Value::as_str) - .map(str::to_owned) - .collect::>(); + let base_seq = proxies_seq.unwrap_or_else(Sequence::new); + let mut seq = Sequence::new(); + let mut existing = HashSet::new(); for name in &added_proxy_names { if existing.insert(name.clone()) { seq.push(Value::String(name.clone())); } } + for value in base_seq { + match &value { + Value::String(name) => { + if existing.insert(name.to_owned()) { + seq.push(value); + } + } + _ => seq.push(value), + } + } proxies_seq = Some(seq); appended_to_selector = true; } @@ -270,7 +277,7 @@ proxy-groups: .as_sequence() .expect("group proxies should be a sequence"); let names: Vec<&str> = group1_proxies.iter().filter_map(Value::as_str).collect(); - assert_eq!(names, vec!["proxy1", "proxy3", "proxy4"]); + assert_eq!(names, vec!["proxy3", "proxy4", "proxy1"]); let group2_proxies = groups[1] .as_mapping()