diff --git a/src-tauri/src/enhance/field.rs b/src-tauri/src/enhance/field.rs index c18f6cfba93bcf08881814359e823169f1779931..1e395b64ef40562d752526c49c6f5dc38431cfe0 100644 --- a/src-tauri/src/enhance/field.rs +++ b/src-tauri/src/enhance/field.rs @@ -1,4 +1,5 @@ use serde_yaml::{Mapping, Value}; +use std::collections::HashSet; pub const HANDLE_FIELDS: [&str; 9] = [ "mode", @@ -102,7 +103,7 @@ pub fn use_lowercase(config: Mapping) -> Mapping { ret } -pub fn use_sort(config: Mapping) -> Mapping { +pub fn use_sort(config: Mapping, enable_filter: bool) -> Mapping { let mut ret = Mapping::new(); HANDLE_FIELDS @@ -115,6 +116,28 @@ pub fn use_sort(config: Mapping) -> Mapping { ret.insert(key, value.clone()); }); }); + + if !enable_filter { + let supported_keys: HashSet<&str> = HANDLE_FIELDS + .into_iter() + .chain(OTHERS_FIELDS) + .chain(DEFAULT_FIELDS) + .collect(); + + let config_keys: HashSet<&str> = config + .keys() + .filter_map(|e| e.as_str()) + .into_iter() + .collect(); + + config_keys.difference(&supported_keys).for_each(|&key| { + let key = Value::from(key); + config.get(&key).map(|value| { + ret.insert(key, value.clone()); + }); + }); + } + ret } diff --git a/src-tauri/src/enhance/mod.rs b/src-tauri/src/enhance/mod.rs index 115fda7e4eb63d40098e60789aafee349e39d63f..0a414000cbac85873a6004b971686b74e72ec5f7 100644 --- a/src-tauri/src/enhance/mod.rs +++ b/src-tauri/src/enhance/mod.rs @@ -116,7 +116,7 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) { config = use_filter(config, &clash_fields, enable_filter); config = use_tun(config, enable_tun); - config = use_sort(config); + config = use_sort(config, enable_filter); let mut exists_set = HashSet::new(); exists_set.extend(exists_keys.into_iter().filter(|s| clash_fields.contains(s)));