diff --git a/src-tauri/src/enhance/mod.rs b/src-tauri/src/enhance/mod.rs index 2beebae5..45033faf 100644 --- a/src-tauri/src/enhance/mod.rs +++ b/src-tauri/src/enhance/mod.rs @@ -60,7 +60,7 @@ pub async fn enhance() -> (Mapping, Vec, HashMap) { global_merge, global_script, profile_name, - dns_enhanced_mode, + dns, ) = { let profiles = Config::profiles(); let profiles = profiles.latest(); @@ -131,12 +131,9 @@ pub async fn enhance() -> (Mapping, Vec, HashMap) { .and_then(|item| item.name.clone()) .unwrap_or_default(); - let dns_enhanced_mode = current - .get("dns") - .and_then(|val| val.get("enhanced-mode")) - .and_then(|val| val.as_str()) - .unwrap_or("redir-host") - .to_string(); + let dns = current.get("dns").map_or(Mapping::new(), |val| { + val.as_mapping().cloned().unwrap_or(Mapping::new()) + }); ( current, @@ -148,7 +145,7 @@ pub async fn enhance() -> (Mapping, Vec, HashMap) { global_merge, global_script, name, - dns_enhanced_mode, + dns, ) }; @@ -268,7 +265,7 @@ pub async fn enhance() -> (Mapping, Vec, HashMap) { }); } - config = use_tun(config, enable_tun, dns_enhanced_mode).await; + config = use_tun(config, enable_tun, dns).await; config = use_sort(config); let mut exists_set = HashSet::new(); diff --git a/src-tauri/src/enhance/tun.rs b/src-tauri/src/enhance/tun.rs index 87e71252..a0fee740 100644 --- a/src-tauri/src/enhance/tun.rs +++ b/src-tauri/src/enhance/tun.rs @@ -18,7 +18,7 @@ macro_rules! append { }; } -pub async fn use_tun(mut config: Mapping, enable: bool, origin_enhanced_mode: String) -> Mapping { +pub async fn use_tun(mut config: Mapping, enable: bool, origin_dns_val: Mapping) -> Mapping { let tun_key = Value::from("tun"); let tun_val = config.get(&tun_key); let mut tun_val = tun_val.map_or(Mapping::new(), |val| { @@ -41,7 +41,42 @@ pub async fn use_tun(mut config: Mapping, enable: bool, origin_enhanced_mode: St crate::utils::resolve::set_public_dns("8.8.8.8".to_string()).await; } } else { - revise!(dns_val, "enhanced-mode", origin_enhanced_mode.as_str()); + revise!( + dns_val, + "enable", + origin_dns_val + .get("enable") + .and_then(|v| v.as_bool()) + .unwrap_or(true) + ); + + revise!( + dns_val, + "ipv6", + origin_dns_val + .get("ipv6") + .and_then(|v| v.as_bool()) + .unwrap_or(true) + ); + + revise!( + dns_val, + "enhanced-mode", + origin_dns_val + .get("enhanced-mode") + .and_then(|v| v.as_str()) + .unwrap_or("redir-host") + ); + + revise!( + dns_val, + "fake-ip-range", + origin_dns_val + .get("fake-ip-range") + .and_then(|v| v.as_str()) + .unwrap_or("198.18.0.1/16") + ); + #[cfg(target_os = "macos")] crate::utils::resolve::restore_public_dns().await; }