diff --git a/src-tauri/src/cmds.rs b/src-tauri/src/cmds.rs index 8cf1b54e3ac0cfe59441ceb9cac3bc0401f8edca..617ac42fadb2c84fa369b58cba857a9536576537 100644 --- a/src-tauri/src/cmds.rs +++ b/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 diff --git a/src/components/setting/setting-system.tsx b/src/components/setting/setting-system.tsx index 5ccad990f3874014c419e1be4087039d0baf0c7e..b19e9869187a679ac4abab94725585ab01ef122e 100644 --- a/src/components/setting/setting-system.tsx +++ b/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> ); }; diff --git a/src/services/types.ts b/src/services/types.ts index 1f42c8224152b54da7c55b405e30dccb5dc11685..2216cd7eaab70483d7b10818c3efaea92d4c0b77 100644 --- a/src/services/types.ts +++ b/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; } }