feat: support to disable clash fields filter

This commit is contained in:
GyDi 2023-02-16 23:52:55 +08:00
parent c9b7eccbc1
commit 027295d995
No known key found for this signature in database
GPG Key ID: 9C3AD40F1F99880A
4 changed files with 22 additions and 13 deletions

View File

@ -66,6 +66,9 @@ pub struct IVerge {
/// 默认的延迟测试连接 /// 默认的延迟测试连接
pub default_latency_test: Option<String>, pub default_latency_test: Option<String>,
/// 支持关闭字段过滤避免meta的新字段都被过滤掉默认为真
pub enable_clash_fields: Option<bool>,
/// 是否使用内部的脚本支持,默认为真 /// 是否使用内部的脚本支持,默认为真
pub enable_builtin_enhanced: Option<bool>, pub enable_builtin_enhanced: Option<bool>,
@ -120,6 +123,7 @@ impl IVerge {
proxy_guard_duration: Some(30), proxy_guard_duration: Some(30),
auto_close_connection: Some(true), auto_close_connection: Some(true),
enable_builtin_enhanced: Some(true), enable_builtin_enhanced: Some(true),
enable_clash_fields: Some(true),
..Self::default() ..Self::default()
} }
} }
@ -163,6 +167,7 @@ impl IVerge {
patch!(default_latency_test); patch!(default_latency_test);
patch!(enable_builtin_enhanced); patch!(enable_builtin_enhanced);
patch!(proxy_layout_column); patch!(proxy_layout_column);
patch!(enable_clash_fields);
} }
/// 在初始化前尝试拿到单例端口的值 /// 在初始化前尝试拿到单例端口的值

View File

@ -68,7 +68,11 @@ pub fn use_valid_fields(mut valid: Vec<String>) -> Vec<String> {
.collect() .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(); let mut ret = Mapping::new();
for (key, value) in config.into_iter() { for (key, value) in config.into_iter() {

View File

@ -1,7 +1,6 @@
use super::{use_filter, use_lowercase}; use super::{use_filter, use_lowercase};
use serde_yaml::{self, Mapping, Sequence, Value}; use serde_yaml::{self, Mapping, Sequence, Value};
#[allow(unused)]
const MERGE_FIELDS: [&str; 6] = [ const MERGE_FIELDS: [&str; 6] = [
"prepend-rules", "prepend-rules",
"append-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_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"] ["rules", "proxies", "proxy-groups"]
.iter() .iter()

View File

@ -23,13 +23,14 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) {
// config.yaml 的配置 // config.yaml 的配置
let clash_config = { Config::clash().latest().0.clone() }; 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 = Config::verge();
let verge = verge.latest(); let verge = verge.latest();
( (
verge.clash_core.clone(), verge.clash_core.clone(),
verge.enable_tun_mode.clone(), verge.enable_tun_mode.clone().unwrap_or(false),
verge.enable_builtin_enhanced.clone(), 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 mut exists_keys = use_keys(&config); // 保存出现过的keys
let valid = use_valid_fields(valid); let valid = use_valid_fields(valid);
config = use_filter(config, &valid); config = use_filter(config, &valid, enable_filter);
// 处理用户的profile // 处理用户的profile
chain.into_iter().for_each(|item| match item.data { chain.into_iter().for_each(|item| match item.data {
ChainType::Merge(merge) => { ChainType::Merge(merge) => {
exists_keys.extend(use_keys(&merge)); exists_keys.extend(use_keys(&merge));
config = use_merge(merge, config.to_owned()); 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) => { ChainType::Script(script) => {
let mut logs = vec![]; let mut logs = vec![];
@ -73,7 +74,7 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) {
match use_script(script, config.to_owned()) { match use_script(script, config.to_owned()) {
Ok((res_config, res_logs)) => { Ok((res_config, res_logs)) => {
exists_keys.extend(use_keys(&res_config)); 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); logs.extend(res_logs);
} }
Err(err) => logs.push(("exception".into(), err.to_string())), 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(); let clash_fields = use_clash_fields();
// 内建脚本最后跑 // 内建脚本最后跑
if enable_builtin.unwrap_or(true) { if enable_builtin {
ChainItem::builtin() ChainItem::builtin()
.into_iter() .into_iter()
.filter(|(s, _)| s.is_support(clash_core.as_ref())) .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 { match item.data {
ChainType::Script(script) => match use_script(script, config.to_owned()) { ChainType::Script(script) => match use_script(script, config.to_owned()) {
Ok((res_config, _)) => { Ok((res_config, _)) => {
config = use_filter(res_config, &clash_fields); config = use_filter(res_config, &clash_fields, enable_filter);
} }
Err(err) => { Err(err) => {
log::error!(target: "app", "builtin script error `{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_filter(config, &clash_fields, enable_filter);
config = use_tun(config, tun_mode.unwrap_or(false)); config = use_tun(config, enable_tun);
config = use_sort(config); config = use_sort(config);
let mut exists_set = HashSet::new(); let mut exists_set = HashSet::new();