mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2024-11-16 19:56:50 +08:00
feat: support to disable clash fields filter
This commit is contained in:
parent
c9b7eccbc1
commit
027295d995
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 在初始化前尝试拿到单例端口的值
|
/// 在初始化前尝试拿到单例端口的值
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user