Sfoglia il codice sorgente

feat: edit system proxy bypass

GyDi 3 anni fa
parent
commit
78a0cfd052

+ 7 - 3
src-tauri/src/cmds.rs

@@ -281,10 +281,14 @@ pub fn get_cur_proxy(verge_state: State<'_, VergeState>) -> Result<Option<SysPro
 /// get the verge config
 #[tauri::command]
 pub fn get_verge_config(verge_state: State<'_, VergeState>) -> Result<VergeConfig, String> {
-  match verge_state.0.lock() {
-    Ok(arc) => Ok(arc.config.clone()),
-    Err(_) => Err("failed to get verge lock".into()),
+  let verge = verge_state.0.lock().unwrap();
+  let mut config = verge.config.clone();
+
+  if config.system_proxy_bypass.is_none() && verge.cur_sysproxy.is_some() {
+    config.system_proxy_bypass = Some(verge.cur_sysproxy.clone().unwrap().bypass)
   }
+
+  Ok(config)
 }
 
 /// patch the verge config

+ 21 - 2
src/components/setting/setting-system.tsx

@@ -1,5 +1,5 @@
 import useSWR, { useSWRConfig } from "swr";
-import { Box, ListItemText, Switch } from "@mui/material";
+import { Box, ListItemText, Switch, TextField } from "@mui/material";
 import { getVergeConfig, patchVergeConfig } from "../../services/cmds";
 import { SettingList, SettingItem } from "./setting";
 import { CmdType } from "../../services/types";
@@ -17,6 +17,7 @@ const SettingSystem = ({ onError }: Props) => {
   const {
     enable_auto_launch: startup = false,
     enable_system_proxy: proxy = false,
+    system_proxy_bypass: bypass = "",
   } = vergeConfig ?? {};
 
   const onSwitchFormat = (_e: any, value: boolean) => value;
@@ -55,11 +56,29 @@ const SettingSystem = ({ onError }: Props) => {
           onCatch={onError}
           onFormat={onSwitchFormat}
           onChange={(e) => onChangeData({ enable_system_proxy: e })}
-          onGuard={(e) => patchVergeConfig({ enable_system_proxy: e })}
+          onGuard={async (e) => {
+            await patchVergeConfig({ enable_system_proxy: e });
+            mutate("getVergeConfig"); // update bypass value
+          }}
         >
           <Switch edge="end" />
         </GuardState>
       </SettingItem>
+
+      {proxy && (
+        <SettingItem>
+          <ListItemText primary="Proxy Bypass" />
+          <GuardState
+            value={bypass ?? ""}
+            onCatch={onError}
+            onFormat={(e: any) => e.target.value}
+            onChange={(e) => onChangeData({ system_proxy_bypass: e })}
+            onGuard={(e) => patchVergeConfig({ system_proxy_bypass: e })}
+          >
+            <TextField autoComplete="off" size="small" sx={{ width: 120 }} />
+          </GuardState>
+        </SettingItem>
+      )}
     </SettingList>
   );
 };

+ 1 - 0
src/services/types.ts

@@ -114,5 +114,6 @@ export namespace CmdType {
     theme_blur?: boolean;
     enable_auto_launch?: boolean;
     enable_system_proxy?: boolean;
+    system_proxy_bypass?: string;
   }
 }