From f00a5af6c902390d7ff42a49bb83d3a621d80ff9 Mon Sep 17 00:00:00 2001 From: wonfen Date: Wed, 19 Feb 2025 13:56:22 +0800 Subject: [PATCH] feat: Add system proxy status indicators --- src/components/setting/setting-system.tsx | 34 +++++++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/components/setting/setting-system.tsx b/src/components/setting/setting-system.tsx index b76a2ad9..3e13b144 100644 --- a/src/components/setting/setting-system.tsx +++ b/src/components/setting/setting-system.tsx @@ -1,7 +1,11 @@ -import useSWR from "swr"; +import useSWR, { mutate } from "swr"; import { useRef } from "react"; import { useTranslation } from "react-i18next"; -import { SettingsRounded } from "@mui/icons-material"; +import { + SettingsRounded, + PlayArrowRounded, + PauseRounded, +} from "@mui/icons-material"; import { useVerge } from "@/hooks/use-verge"; import { DialogRef, Notice, Switch } from "@/components/base"; import { SettingList, SettingItem } from "./mods/setting-comp"; @@ -9,6 +13,7 @@ import { GuardState } from "./mods/guard-state"; import { SysproxyViewer } from "./mods/sysproxy-viewer"; import { TunViewer } from "./mods/tun-viewer"; import { TooltipIcon } from "@/components/base/base-tooltip-icon"; +import { getSystemProxy, getAutotemProxy } from "@/services/cmds"; interface Props { onError?: (err: Error) => void; @@ -19,6 +24,9 @@ const SettingSystem = ({ onError }: Props) => { const { verge, mutateVerge, patchVerge } = useVerge(); + const { data: sysproxy } = useSWR("getSystemProxy", getSystemProxy); + const { data: autoproxy } = useSWR("getAutotemProxy", getAutotemProxy); + const sysproxyRef = useRef(null); const tunRef = useRef(null); @@ -27,13 +35,25 @@ const SettingSystem = ({ onError }: Props) => { enable_auto_launch, enable_silent_start, enable_system_proxy, + proxy_auto_config, } = verge ?? {}; + const isProxyEnabled = proxy_auto_config + ? autoproxy?.enable + : sysproxy?.enable; + const onSwitchFormat = (_e: any, value: boolean) => value; const onChangeData = (patch: Partial) => { mutateVerge({ ...verge, ...patch }, false); }; + const updateProxyStatus = async () => { + // 等待一小段时间让系统代理状态变化 + await new Promise((resolve) => setTimeout(resolve, 100)); + await mutate("getSystemProxy"); + await mutate("getAutotemProxy"); + }; + return ( @@ -73,6 +93,11 @@ const SettingSystem = ({ onError }: Props) => { icon={SettingsRounded} onClick={() => sysproxyRef.current?.open()} /> + {isProxyEnabled ? ( + + ) : ( + + )} } > @@ -82,7 +107,10 @@ const SettingSystem = ({ onError }: Props) => { onCatch={onError} onFormat={onSwitchFormat} onChange={(e) => onChangeData({ enable_system_proxy: e })} - onGuard={(e) => patchVerge({ enable_system_proxy: e })} + onGuard={async (e) => { + await patchVerge({ enable_system_proxy: e }); + await updateProxyStatus(); + }} >