Ver código fonte

perf: Disable Tun mode before shutting down

MystiPanda 1 ano atrás
pai
commit
0f2af91a04
2 arquivos alterados com 12 adições e 1 exclusões
  1. 1 1
      src-tauri/Cargo.toml
  2. 11 0
      src-tauri/src/core/core.rs

+ 1 - 1
src-tauri/Cargo.toml

@@ -37,7 +37,7 @@ serde = { version = "1.0", features = ["derive"] }
 reqwest = { version = "0.12", features = ["json", "rustls-tls"] }
 sysproxy = { git="https://github.com/zzzgydi/sysproxy-rs", branch = "main" }
 auto-launch = { git="https://github.com/zzzgydi/auto-launch", branch = "main" }
-tauri = { version = "1.6", features = [ "fs-read-file", "fs-exists", "path-all", "protocol-asset", "dialog-open", "notification-all", "icon-png", "icon-ico", "clipboard-all", "global-shortcut-all", "process-all", "shell-all", "system-tray", "updater", "window-all", "devtools"] }
+tauri = { version = "1.6", features = [ "http-all", "fs-read-file", "fs-exists", "path-all", "protocol-asset", "dialog-open", "notification-all", "icon-png", "icon-ico", "clipboard-all", "global-shortcut-all", "process-all", "shell-all", "system-tray", "updater", "window-all", "devtools"] }
 
 [target.'cfg(windows)'.dependencies]
 runas = "=1.2.0"

+ 11 - 0
src-tauri/src/core/core.rs

@@ -5,6 +5,7 @@ use crate::{config::*, utils::dirs};
 use anyhow::{bail, Context, Result};
 use once_cell::sync::OnceCell;
 use parking_lot::Mutex;
+use serde_yaml::Mapping;
 use std::{fs, io::Write, sync::Arc, time::Duration};
 use sysinfo::{Pid, System};
 use tauri::api::process::{Command, CommandChild, CommandEvent};
@@ -232,6 +233,16 @@ impl CoreManager {
 
     /// 停止核心运行
     pub fn stop_core(&self) -> Result<()> {
+        // 关闭tun模式
+        tauri::async_runtime::block_on(async move {
+            let mut disable = Mapping::new();
+            let mut tun = Mapping::new();
+            tun.insert("enable".into(), false.into());
+            disable.insert("tun".into(), tun.into());
+            log::debug!(target: "app", "disable tun mode");
+            let _ = clash_api::patch_configs(&disable).await;
+        });
+
         if *self.use_service_mode.lock() {
             log::debug!(target: "app", "stop the core by service");
             tauri::async_runtime::block_on(async move {