mirror of
https://github.com/clash-verge-rev/clash-verge-rev
synced 2025-05-05 03:03:46 +08:00
fix: dns not restored when exiting the app
This commit is contained in:
parent
7c1b11851f
commit
74251af163
@ -371,7 +371,7 @@ pub fn open_devtools(app_handle: tauri::AppHandle) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub fn exit_app() {
|
pub async fn exit_app() {
|
||||||
feat::quit(Some(0));
|
feat::quit(Some(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,11 +36,11 @@ pub async fn use_tun(mut config: Mapping, enable: bool) -> Mapping {
|
|||||||
revise!(dns_val, "enhanced-mode", "fake-ip");
|
revise!(dns_val, "enhanced-mode", "fake-ip");
|
||||||
revise!(dns_val, "fake-ip-range", "10.96.0.0/16");
|
revise!(dns_val, "fake-ip-range", "10.96.0.0/16");
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
set_public_dns("10.96.0.2".to_string()).await;
|
crate::utils::resolve::set_public_dns("10.96.0.2".to_string()).await;
|
||||||
} else {
|
} else {
|
||||||
revise!(dns_val, "enhanced-mode", "redir-host");
|
revise!(dns_val, "enhanced-mode", "redir-host");
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
restore_public_dns().await;
|
crate::utils::resolve::restore_public_dns().await;
|
||||||
}
|
}
|
||||||
|
|
||||||
revise!(tun_val, "enable", enable);
|
revise!(tun_val, "enable", enable);
|
||||||
@ -48,76 +48,3 @@ pub async fn use_tun(mut config: Mapping, enable: bool) -> Mapping {
|
|||||||
revise!(config, "dns", dns_val);
|
revise!(config, "dns", dns_val);
|
||||||
config
|
config
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "macos")]
|
|
||||||
async fn set_public_dns(dns_server: String) {
|
|
||||||
use crate::core::handle;
|
|
||||||
use crate::utils::dirs;
|
|
||||||
use tauri_plugin_shell::ShellExt;
|
|
||||||
let app_handle = handle::Handle::global().app_handle().unwrap();
|
|
||||||
|
|
||||||
log::info!(target: "app", "try to set system dns");
|
|
||||||
let resource_dir = dirs::app_resources_dir().unwrap();
|
|
||||||
let script = resource_dir.join("set_dns.sh");
|
|
||||||
if !script.exists() {
|
|
||||||
log::error!(target: "app", "set_dns.sh not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let script = script.to_string_lossy().into_owned();
|
|
||||||
match app_handle
|
|
||||||
.shell()
|
|
||||||
.command("bash")
|
|
||||||
.args([script, dns_server])
|
|
||||||
.current_dir(resource_dir)
|
|
||||||
.status()
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
Ok(status) => {
|
|
||||||
if status.success() {
|
|
||||||
log::info!(target: "app", "set system dns successfully");
|
|
||||||
} else {
|
|
||||||
let code = status.code().unwrap_or(-1);
|
|
||||||
log::error!(target: "app", "set system dns failed: {code}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
log::error!(target: "app", "set system dns failed: {err}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(target_os = "macos")]
|
|
||||||
async fn restore_public_dns() {
|
|
||||||
use crate::core::handle;
|
|
||||||
use crate::utils::dirs;
|
|
||||||
use tauri_plugin_shell::ShellExt;
|
|
||||||
let app_handle = handle::Handle::global().app_handle().unwrap();
|
|
||||||
log::info!(target: "app", "try to unset system dns");
|
|
||||||
let resource_dir = dirs::app_resources_dir().unwrap();
|
|
||||||
let script = resource_dir.join("unset_dns.sh");
|
|
||||||
if !script.exists() {
|
|
||||||
log::error!(target: "app", "unset_dns.sh not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let script = script.to_string_lossy().into_owned();
|
|
||||||
match app_handle
|
|
||||||
.shell()
|
|
||||||
.command("bash")
|
|
||||||
.args([script])
|
|
||||||
.current_dir(resource_dir)
|
|
||||||
.status()
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
Ok(status) => {
|
|
||||||
if status.success() {
|
|
||||||
log::info!(target: "app", "unset system dns successfully");
|
|
||||||
} else {
|
|
||||||
let code = status.code().unwrap_or(-1);
|
|
||||||
log::error!(target: "app", "unset system dns failed: {code}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
log::error!(target: "app", "unset system dns failed: {err}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -101,6 +101,11 @@ pub fn toggle_tun_mode() {
|
|||||||
pub fn quit(code: Option<i32>) {
|
pub fn quit(code: Option<i32>) {
|
||||||
let app_handle = handle::Handle::global().app_handle().unwrap();
|
let app_handle = handle::Handle::global().app_handle().unwrap();
|
||||||
resolve::resolve_reset();
|
resolve::resolve_reset();
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
tauri::async_runtime::block_on(async {
|
||||||
|
resolve::restore_public_dns().await;
|
||||||
|
});
|
||||||
|
|
||||||
app_handle.exit(code.unwrap_or(0));
|
app_handle.exit(code.unwrap_or(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,3 +344,76 @@ fn resolve_random_port_config() -> Result<()> {
|
|||||||
clash_config.data().save_config()?;
|
clash_config.data().save_config()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
pub async fn set_public_dns(dns_server: String) {
|
||||||
|
use crate::core::handle;
|
||||||
|
use crate::utils::dirs;
|
||||||
|
use tauri_plugin_shell::ShellExt;
|
||||||
|
let app_handle = handle::Handle::global().app_handle().unwrap();
|
||||||
|
|
||||||
|
log::info!(target: "app", "try to set system dns");
|
||||||
|
let resource_dir = dirs::app_resources_dir().unwrap();
|
||||||
|
let script = resource_dir.join("set_dns.sh");
|
||||||
|
if !script.exists() {
|
||||||
|
log::error!(target: "app", "set_dns.sh not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let script = script.to_string_lossy().into_owned();
|
||||||
|
match app_handle
|
||||||
|
.shell()
|
||||||
|
.command("bash")
|
||||||
|
.args([script, dns_server])
|
||||||
|
.current_dir(resource_dir)
|
||||||
|
.status()
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(status) => {
|
||||||
|
if status.success() {
|
||||||
|
log::info!(target: "app", "set system dns successfully");
|
||||||
|
} else {
|
||||||
|
let code = status.code().unwrap_or(-1);
|
||||||
|
log::error!(target: "app", "set system dns failed: {code}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
log::error!(target: "app", "set system dns failed: {err}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
pub async fn restore_public_dns() {
|
||||||
|
use crate::core::handle;
|
||||||
|
use crate::utils::dirs;
|
||||||
|
use tauri_plugin_shell::ShellExt;
|
||||||
|
let app_handle = handle::Handle::global().app_handle().unwrap();
|
||||||
|
log::info!(target: "app", "try to unset system dns");
|
||||||
|
let resource_dir = dirs::app_resources_dir().unwrap();
|
||||||
|
let script = resource_dir.join("unset_dns.sh");
|
||||||
|
if !script.exists() {
|
||||||
|
log::error!(target: "app", "unset_dns.sh not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let script = script.to_string_lossy().into_owned();
|
||||||
|
match app_handle
|
||||||
|
.shell()
|
||||||
|
.command("bash")
|
||||||
|
.args([script])
|
||||||
|
.current_dir(resource_dir)
|
||||||
|
.status()
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(status) => {
|
||||||
|
if status.success() {
|
||||||
|
log::info!(target: "app", "unset system dns successfully");
|
||||||
|
} else {
|
||||||
|
let code = status.code().unwrap_or(-1);
|
||||||
|
log::error!(target: "app", "unset system dns failed: {code}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
log::error!(target: "app", "unset system dns failed: {err}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user