diff --git a/src-tauri/src/config/verge.rs b/src-tauri/src/config/verge.rs index 8db5cac3913aeefe6fbbb6cec9d0d28dab6543f0..164a8293b7d1283b7bc70b58ff235ad75479ba7a 100644 --- a/src-tauri/src/config/verge.rs +++ b/src-tauri/src/config/verge.rs @@ -66,6 +66,9 @@ pub struct IVerge { /// 默认的延迟测试连接 pub default_latency_test: Option<String>, + /// 支æŒå…³é—å—段过滤,é¿å…metaçš„æ–°å—段都被过滤掉,默认为真 + pub enable_clash_fields: Option<bool>, + /// 是å¦ä½¿ç”¨å†…部的脚本支æŒï¼Œé»˜è®¤ä¸ºçœŸ pub enable_builtin_enhanced: Option<bool>, @@ -120,6 +123,7 @@ impl IVerge { proxy_guard_duration: Some(30), auto_close_connection: Some(true), enable_builtin_enhanced: Some(true), + enable_clash_fields: Some(true), ..Self::default() } } @@ -163,6 +167,7 @@ impl IVerge { patch!(default_latency_test); patch!(enable_builtin_enhanced); patch!(proxy_layout_column); + patch!(enable_clash_fields); } /// 在åˆå§‹åŒ–å‰å°è¯•æ‹¿åˆ°å•ä¾‹ç«¯å£çš„值 diff --git a/src-tauri/src/enhance/field.rs b/src-tauri/src/enhance/field.rs index e6f5752d3404f384b1c624f2a8e716ba7ef54d9f..893e521978d1b1e831dcef89b68b80980605f377 100644 --- a/src-tauri/src/enhance/field.rs +++ b/src-tauri/src/enhance/field.rs @@ -68,7 +68,11 @@ pub fn use_valid_fields(mut valid: Vec<String>) -> Vec<String> { .collect() } -pub fn use_filter(config: Mapping, filter: &Vec<String>) -> Mapping { +pub fn use_filter(config: Mapping, filter: &Vec<String>, enable: bool) -> Mapping { + if !enable { + return config; + } + let mut ret = Mapping::new(); for (key, value) in config.into_iter() { diff --git a/src-tauri/src/enhance/merge.rs b/src-tauri/src/enhance/merge.rs index 7f6b89dbdb9b6da7b34ab95ec53db8d3054c2160..20342c989882e273815ea72b08d86d35c1734eb9 100644 --- a/src-tauri/src/enhance/merge.rs +++ b/src-tauri/src/enhance/merge.rs @@ -1,7 +1,6 @@ use super::{use_filter, use_lowercase}; use serde_yaml::{self, Mapping, Sequence, Value}; -#[allow(unused)] const MERGE_FIELDS: [&str; 6] = [ "prepend-rules", "append-rules", @@ -20,7 +19,7 @@ pub fn use_merge(merge: Mapping, mut config: Mapping) -> Mapping { }); let merge_list = MERGE_FIELDS.iter().map(|s| s.to_string()); - let merge = use_filter(merge, &merge_list.collect()); + let merge = use_filter(merge, &merge_list.collect(), true); ["rules", "proxies", "proxy-groups"] .iter() diff --git a/src-tauri/src/enhance/mod.rs b/src-tauri/src/enhance/mod.rs index 8c27a8f534b14dad32bccbfb8ee9497ed76bb32d..115fda7e4eb63d40098e60789aafee349e39d63f 100644 --- a/src-tauri/src/enhance/mod.rs +++ b/src-tauri/src/enhance/mod.rs @@ -23,13 +23,14 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) { // config.yaml çš„é…ç½® let clash_config = { Config::clash().latest().0.clone() }; - let (clash_core, tun_mode, enable_builtin) = { + let (clash_core, enable_tun, enable_builtin, enable_filter) = { let verge = Config::verge(); let verge = verge.latest(); ( verge.clash_core.clone(), - verge.enable_tun_mode.clone(), - verge.enable_builtin_enhanced.clone(), + verge.enable_tun_mode.clone().unwrap_or(false), + verge.enable_builtin_enhanced.clone().unwrap_or(true), + verge.enable_clash_fields.clone().unwrap_or(true), ) }; @@ -58,14 +59,14 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) { let mut exists_keys = use_keys(&config); // ä¿å˜å‡ºçŽ°è¿‡çš„keys let valid = use_valid_fields(valid); - config = use_filter(config, &valid); + config = use_filter(config, &valid, enable_filter); // 处ç†ç”¨æˆ·çš„profile chain.into_iter().for_each(|item| match item.data { ChainType::Merge(merge) => { exists_keys.extend(use_keys(&merge)); config = use_merge(merge, config.to_owned()); - config = use_filter(config.to_owned(), &valid); + config = use_filter(config.to_owned(), &valid, enable_filter); } ChainType::Script(script) => { let mut logs = vec![]; @@ -73,7 +74,7 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) { match use_script(script, config.to_owned()) { Ok((res_config, res_logs)) => { exists_keys.extend(use_keys(&res_config)); - config = use_filter(res_config, &valid); + config = use_filter(res_config, &valid, enable_filter); logs.extend(res_logs); } Err(err) => logs.push(("exception".into(), err.to_string())), @@ -91,7 +92,7 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) { let clash_fields = use_clash_fields(); // 内建脚本最åŽè·‘ - if enable_builtin.unwrap_or(true) { + if enable_builtin { ChainItem::builtin() .into_iter() .filter(|(s, _)| s.is_support(clash_core.as_ref())) @@ -102,7 +103,7 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) { match item.data { ChainType::Script(script) => match use_script(script, config.to_owned()) { Ok((res_config, _)) => { - config = use_filter(res_config, &clash_fields); + config = use_filter(res_config, &clash_fields, enable_filter); } Err(err) => { log::error!(target: "app", "builtin script error `{err}`"); @@ -113,8 +114,8 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) { }); } - config = use_filter(config, &clash_fields); - config = use_tun(config, tun_mode.unwrap_or(false)); + config = use_filter(config, &clash_fields, enable_filter); + config = use_tun(config, enable_tun); config = use_sort(config); let mut exists_set = HashSet::new();