* feat: Implement DNS management for macOS - Added `set_public_dns` and `restore_public_dns` functions in `dns.rs` to manage system DNS settings. - Introduced `resolve` module to encapsulate DNS and scheme resolution functionalities. - Implemented `resolve_scheme` function in `scheme.rs` to handle deep links and profile imports. - Created UI readiness management in `ui.rs` to track and update UI loading states. - Developed window management logic in `window.rs` to handle window creation and visibility. - Added initial loading overlay script in `window_script.rs` for better user experience during startup. - Updated server handling in `server.rs` to integrate new resolve functionalities. - Refactored window creation calls in `window_manager.rs` to use the new window management logic. * refactor: streamline asynchronous handling in config and resolve setup * Revert "refactor: streamline asynchronous handling in config and resolve setup" This reverts commit 23d7dc86d5b87a3a34df2ae69c2caacef803ef81. * fix: optimize asynchronous memory handling * fix: enhance task logging by adding size check for special cases * refactor: enhance async initialization and streamline setup process * refactor: optimize async setup by consolidating initialization tasks * chore: update changelog for Mihomo(Meta) kernel upgrade to v1.19.13 * fix: improve startup phase initialization performance * refactor: optimize file read/write performance to reduce application wait time * refactor: simplify app instance exit logic and adjust system proxy guard initialization * refactor: change resolve_setup_async to synchronous execution for improved performance * refactor: update resolve_setup_async to accept AppHandle for improved initialization flow * refactor: remove unnecessary initialization of portable flag in run function * refactor: consolidate async initialization tasks into a single blocking call for improved execution flow * refactor: optimize resolve_setup_async by restructuring async tasks for improved concurrency * refactor: streamline resolve_setup_async and embed_server for improved async handling * refactor: separate synchronous and asynchronous setup functions for improved clarity * refactor: simplify async notification handling and remove redundant network manager initialization * refactor: enhance async handling in proxy request cache and window creation logic * refactor: improve code formatting and readability in ProxyRequestCache * refactor: adjust singleton check timeout and optimize trace size conditions * refactor: update TRACE_SPECIAL_SIZE to include additional size condition * refactor: update kode-bridge dependency to version 0.2.1-rc2 * refactor: replace RwLock with AtomicBool for UI readiness and implement event-driven monitoring * refactor: convert async functions to synchronous for window management * Update src-tauri/src/utils/resolve/window.rs * fix: handle missing app_handle in create_window function * Update src-tauri/src/module/lightweight.rs
88 lines
2.8 KiB
Rust
88 lines
2.8 KiB
Rust
use serde_yaml::{Mapping, Value};
|
||
|
||
#[cfg(target_os = "macos")]
|
||
use crate::process::AsyncHandler;
|
||
|
||
macro_rules! revise {
|
||
($map: expr, $key: expr, $val: expr) => {
|
||
let ret_key = Value::String($key.into());
|
||
$map.insert(ret_key, Value::from($val));
|
||
};
|
||
}
|
||
|
||
// if key not exists then append value
|
||
#[allow(unused_macros)]
|
||
macro_rules! append {
|
||
($map: expr, $key: expr, $val: expr) => {
|
||
let ret_key = Value::String($key.into());
|
||
if !$map.contains_key(&ret_key) {
|
||
$map.insert(ret_key, Value::from($val));
|
||
}
|
||
};
|
||
}
|
||
|
||
pub fn use_tun(mut config: Mapping, enable: bool) -> 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| {
|
||
val.as_mapping().cloned().unwrap_or(Mapping::new())
|
||
});
|
||
|
||
if enable {
|
||
// 读取DNS配置
|
||
let dns_key = Value::from("dns");
|
||
let dns_val = config.get(&dns_key);
|
||
let mut dns_val = dns_val.map_or(Mapping::new(), |val| {
|
||
val.as_mapping().cloned().unwrap_or(Mapping::new())
|
||
});
|
||
let ipv6_key = Value::from("ipv6");
|
||
let ipv6_val = config
|
||
.get(&ipv6_key)
|
||
.and_then(|v| v.as_bool())
|
||
.unwrap_or(false);
|
||
|
||
// 检查现有的 enhanced-mode 设置
|
||
let current_mode = dns_val
|
||
.get(Value::from("enhanced-mode"))
|
||
.and_then(|v| v.as_str())
|
||
.unwrap_or("fake-ip");
|
||
|
||
// 只有当 enhanced-mode 是 fake-ip 或未设置时才修改 DNS 配置
|
||
if current_mode == "fake-ip" || !dns_val.contains_key(Value::from("enhanced-mode")) {
|
||
revise!(dns_val, "enable", true);
|
||
revise!(dns_val, "ipv6", ipv6_val);
|
||
|
||
if !dns_val.contains_key(Value::from("enhanced-mode")) {
|
||
revise!(dns_val, "enhanced-mode", "fake-ip");
|
||
}
|
||
|
||
if !dns_val.contains_key(Value::from("fake-ip-range")) {
|
||
revise!(dns_val, "fake-ip-range", "198.18.0.1/16");
|
||
}
|
||
|
||
#[cfg(target_os = "macos")]
|
||
{
|
||
AsyncHandler::spawn(move || async move {
|
||
crate::utils::resolve::dns::restore_public_dns().await;
|
||
crate::utils::resolve::dns::set_public_dns("223.6.6.6".to_string()).await;
|
||
});
|
||
}
|
||
}
|
||
|
||
// 当TUN启用时,将修改后的DNS配置写回
|
||
revise!(config, "dns", dns_val);
|
||
} else {
|
||
// TUN未启用时,仅恢复系统DNS,不修改配置文件中的DNS设置
|
||
#[cfg(target_os = "macos")]
|
||
AsyncHandler::spawn(move || async move {
|
||
crate::utils::resolve::dns::restore_public_dns().await;
|
||
});
|
||
}
|
||
|
||
// 更新TUN配置
|
||
revise!(tun_val, "enable", enable);
|
||
revise!(config, "tun", tun_val);
|
||
|
||
config
|
||
}
|