diff --git a/src-tauri/src/config/verge.rs b/src-tauri/src/config/verge.rs index b22d801ca..22de22370 100644 --- a/src-tauri/src/config/verge.rs +++ b/src-tauri/src/config/verge.rs @@ -138,9 +138,6 @@ pub struct IVerge { /// 0: 不清理; 1: 1天;2: 7天; 3: 30天; 4: 90天 pub auto_log_clean: Option, - /// 是否启用随机端口 - pub enable_random_port: Option, - /// verge 的各种 port 用于覆盖 clash 的各种 port #[cfg(not(target_os = "windows"))] pub verge_redir_port: Option, @@ -374,7 +371,6 @@ impl IVerge { proxy_auto_config: Some(false), pac_file_content: Some(DEFAULT_PAC.into()), proxy_host: Some("127.0.0.1".into()), - enable_random_port: Some(false), #[cfg(not(target_os = "windows"))] verge_redir_port: Some(7895), #[cfg(not(target_os = "windows"))] @@ -448,7 +444,6 @@ impl IVerge { patch!(enable_auto_launch); patch!(enable_silent_start); patch!(enable_hover_jump_navigator); - patch!(enable_random_port); #[cfg(not(target_os = "windows"))] patch!(verge_redir_port); #[cfg(not(target_os = "windows"))] @@ -567,7 +562,6 @@ pub struct IVergeResponse { pub proxy_layout_column: Option, pub test_list: Option>, pub auto_log_clean: Option, - pub enable_random_port: Option, #[cfg(not(target_os = "windows"))] pub verge_redir_port: Option, #[cfg(not(target_os = "windows"))] @@ -640,7 +634,6 @@ impl From for IVergeResponse { proxy_layout_column: verge.proxy_layout_column, test_list: verge.test_list, auto_log_clean: verge.auto_log_clean, - enable_random_port: verge.enable_random_port, #[cfg(not(target_os = "windows"))] verge_redir_port: verge.verge_redir_port, #[cfg(not(target_os = "windows"))] diff --git a/src-tauri/src/utils/resolve.rs b/src-tauri/src/utils/resolve.rs index 0aa68166f..104202203 100644 --- a/src-tauri/src/utils/resolve.rs +++ b/src-tauri/src/utils/resolve.rs @@ -1,7 +1,7 @@ #[cfg(target_os = "macos")] use crate::AppHandleManager; use crate::{ - config::{Config, IVerge, PrfItem}, + config::{Config, PrfItem}, core::*, logging, logging_error, module::lightweight::{self, auto_lightweight_mode_init}, @@ -14,10 +14,8 @@ use once_cell::sync::OnceCell; use parking_lot::{Mutex, RwLock}; use percent_encoding::percent_decode_str; use scopeguard; -use serde_yaml::Mapping; use std::time::{Duration, Instant}; use tauri::{AppHandle, Manager}; -use tokio::net::TcpListener; use tauri::Url; //#[cfg(not(target_os = "linux"))] @@ -107,23 +105,6 @@ pub fn reset_ui_ready() { logging!(info, Type::Window, true, "UI就绪状态已重置"); } -pub async fn find_unused_port() -> Result { - match TcpListener::bind("127.0.0.1:0").await { - Ok(listener) => { - let port = listener.local_addr()?.port(); - Ok(port) - } - Err(_) => { - let port = Config::verge() - .latest_ref() - .verge_mixed_port - .unwrap_or(Config::clash().latest_ref().get_mixed_port()); - log::warn!(target: "app", "use default port: {port}"); - Ok(port) - } - } -} - /// 异步方式处理启动后的额外任务 pub async fn resolve_setup_async(app_handle: &AppHandle) { let start_time = std::time::Instant::now(); @@ -147,16 +128,6 @@ pub async fn resolve_setup_async(app_handle: &AppHandle) { logging_error!(Type::Setup, true, init::startup_script().await); - if let Err(err) = resolve_random_port_config().await { - logging!( - error, - Type::System, - true, - "Failed to resolve random port config: {}", - err - ); - } - logging!( info, Type::Config, @@ -686,64 +657,6 @@ pub async fn resolve_scheme(param: String) -> Result<()> { Ok(()) } -async fn resolve_random_port_config() -> Result<()> { - let verge_config = Config::verge(); - let clash_config = Config::clash(); - let enable_random_port = verge_config - .latest_ref() - .enable_random_port - .unwrap_or(false); - - let default_port = verge_config - .latest_ref() - .verge_mixed_port - .unwrap_or(clash_config.latest_ref().get_mixed_port()); - - let port = if enable_random_port { - find_unused_port().await.unwrap_or(default_port) - } else { - default_port - }; - - let port_to_save = port; - - // 合并配置访问以避免锁竞争死锁 - tokio::task::spawn_blocking(move || -> Result<()> { - logging!( - debug, - Type::Config, - true, - "开始合并配置更新操作,避免锁竞争" - ); - - // 按顺序更新配置,避免交叉锁定 - { - let verge_accessor = Config::verge(); - let mut verge_data = verge_accessor.data_mut(); - verge_data.patch_config(IVerge { - verge_mixed_port: Some(port_to_save), - ..IVerge::default() - }); - verge_data.save_file()?; - } - - { - let clash_accessor = Config::clash(); - let mut clash_data = clash_accessor.data_mut(); - let mut mapping = Mapping::new(); - mapping.insert("mixed-port".into(), port_to_save.into()); - clash_data.patch_config(mapping); - clash_data.save_config()?; - } - - logging!(debug, Type::Config, true, "配置更新操作完成"); - Ok(()) - }) - .await??; - - Ok(()) -} - #[cfg(target_os = "macos")] pub async fn set_public_dns(dns_server: String) { use crate::{core::handle, utils::dirs};