From b635e64803c75c6ae99ae26476be480b568d27ec Mon Sep 17 00:00:00 2001
From: GyDi <segydi@foxmail.com>
Date: Thu, 27 Oct 2022 21:14:14 +0800
Subject: [PATCH] fix: adjust reset proxy

---
 src-tauri/src/core/sysopt.rs | 45 ++++++++++++++++++------------------
 1 file changed, 22 insertions(+), 23 deletions(-)

diff --git a/src-tauri/src/core/sysopt.rs b/src-tauri/src/core/sysopt.rs
index afbe0de..b3b95f9 100644
--- a/src-tauri/src/core/sysopt.rs
+++ b/src-tauri/src/core/sysopt.rs
@@ -68,7 +68,7 @@ impl Sysopt {
       self.cur_sysproxy.as_ref().unwrap().set_system_proxy()?;
     }
 
-    // launchs the system proxy guard
+    // run the system proxy guard
     self.guard_proxy();
     Ok(())
   }
@@ -99,29 +99,28 @@ impl Sysopt {
 
   /// reset the sysproxy
   pub fn reset_sysproxy(&mut self) -> Result<()> {
-    if self.cur_sysproxy.is_none() {
-      return Ok(());
-    }
-
-    let mut cur = self.cur_sysproxy.take().unwrap();
-
-    match self.old_sysproxy.take() {
-      Some(old) => {
-        // 如果原代理设置和当前的设置是一样的,需要关闭
-        // 否则就恢复原代理设置
-        if old.enable && old.host == cur.host && old.port == cur.port {
-          cur.enable = false;
-          cur.set_system_proxy()?;
-        } else {
-          old.set_system_proxy()?;
-        }
-      }
-      None => {
-        if cur.enable {
-          cur.enable = false;
-          cur.set_system_proxy()?;
-        }
+    let cur = self.cur_sysproxy.take();
+
+    if let Some(mut old) = self.old_sysproxy.take() {
+      // 如果原代理和当前代理 端口一致,就disable关闭,否则就恢复原代理设置
+      // 当前没有设置代理的时候,不确定旧设置是否和当前一致,全关了
+      let port_same = cur.map_or(true, |cur| old.port == cur.port);
+
+      if old.enable && port_same {
+        old.enable = false;
+        log::info!(target: "app", "reset proxy by disabling the original proxy");
+      } else {
+        log::info!(target: "app", "reset proxy to the original proxy");
       }
+
+      old.set_system_proxy()?;
+    } else if let Some(mut cur) = cur {
+      // 没有原代理,就按现在的代理设置disable即可
+      log::info!(target: "app", "reset proxy by disabling the current proxy");
+      cur.enable = false;
+      cur.set_system_proxy()?;
+    } else {
+      log::info!(target: "app", "reset proxy with no action");
     }
 
     Ok(())
-- 
GitLab