diff --git a/Changelog.md b/Changelog.md index e6b3fb82d..5b88c422f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -23,6 +23,7 @@ - 修复订阅编辑器因节点名称为空而崩溃、因格式错误而丢失内容的问题 - 修复 DNS 编辑器空内容报错、初始值覆盖已有设置的问题 - 修复关闭自动检查更新后,手动检查更新无效的问题 +- 修复应用冷启动或从轻量模式打开界面时, 系统代理被重复设置的问题 **🖥️ Windows** diff --git a/src/components/setting/mods/sysproxy-viewer.tsx b/src/components/setting/mods/sysproxy-viewer.tsx index 4a3c33cfc..9545d8dd6 100644 --- a/src/components/setting/mods/sysproxy-viewer.tsx +++ b/src/components/setting/mods/sysproxy-viewer.tsx @@ -18,7 +18,6 @@ import { useEffect, useImperativeHandle, useMemo, - useRef, useState, } from 'react' import { useTranslation } from 'react-i18next' @@ -27,7 +26,7 @@ import { BaseDialog, BaseFieldset, BaseSplitChipEditor, - DialogRef, + type DialogRef, Switch, TooltipIcon, } from '@/components/base' @@ -35,7 +34,7 @@ import { EditorViewer } from '@/components/profile/editor-viewer' import { useDisplayedMixedPort } from '@/hooks/use-displayed-mixed-port' import { useSystemProxyState } from '@/hooks/use-system-proxy-state' import { useVerge } from '@/hooks/use-verge' -import { useClashConfigData, useSystemData } from '@/providers/app-data-context' +import { useSystemData } from '@/providers/app-data-context' import { getAutotemProxy, getEmbeddedServerPort, @@ -110,7 +109,6 @@ export const SysproxyViewer = forwardRef((props, ref) => { const { verge, patchVerge, mutateVerge } = useVerge() const [hostOptions, setHostOptions] = useState([]) - const { clashConfig } = useClashConfigData() const { indicator: isProxyReallyEnabled, invalidateProxyState } = useSystemProxyState() @@ -156,38 +154,6 @@ export const SysproxyViewer = forwardRef((props, ref) => { return '127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,localhost,*.local,*.crashlytics.com,' } - const prevMixedPortRef = useRef(clashConfig?.mixedPort) - - useEffect(() => { - const mixedPort = clashConfig?.mixedPort - if (!mixedPort || mixedPort === prevMixedPortRef.current) { - return - } - - prevMixedPortRef.current = mixedPort - if (!enabled) { - return - } - - const updateProxy = async () => { - try { - const currentSysProxy = await getSystemProxy() - const currentAutoProxy = await getAutotemProxy() - - if (value.pac ? currentAutoProxy?.enable : currentSysProxy?.enable) { - await patchVergeConfig({ enable_system_proxy: false }) - await sleep(200) - await patchVergeConfig({ enable_system_proxy: true }) - await invalidateProxyState() - } - } catch (err) { - showNotice.error(err) - } - } - - updateProxy() - }, [clashConfig?.mixedPort, enabled, value.pac, invalidateProxyState]) - const { systemProxyAddress } = useSystemData() const displayedMixedPort = useDisplayedMixedPort() @@ -256,10 +222,10 @@ export const SysproxyViewer = forwardRef((props, ref) => { interfaces.forEach((iface) => { iface.addr.forEach((address) => { - if (address.V4 && address.V4.ip) { + if (address.V4?.ip) { ipAddresses.push(address.V4.ip) } - if (address.V6 && address.V6.ip) { + if (address.V6?.ip) { ipAddresses.push(address.V6.ip) } }) @@ -277,7 +243,7 @@ export const SysproxyViewer = forwardRef((props, ref) => { if (hostname) { if (hostname !== 'localhost' && hostname !== '127.0.0.1') { - hostname = hostname + '.local' + hostname = `${hostname}.local` options.push(hostname) debugLog('主机名已添加到选项中:', hostname) } else { @@ -409,7 +375,7 @@ export const SysproxyViewer = forwardRef((props, ref) => { if (isProxyActive) { await patchVergeConfig({ enable_system_proxy: false }) - await new Promise((resolve) => setTimeout(resolve, 50)) + await sleep(50) await patchVergeConfig({ enable_system_proxy: true }) await invalidateProxyState() } diff --git a/src/components/shared/proxy-control-switches.tsx b/src/components/shared/proxy-control-switches.tsx index c82d54d25..8f77df4dd 100644 --- a/src/components/shared/proxy-control-switches.tsx +++ b/src/components/shared/proxy-control-switches.tsx @@ -7,10 +7,10 @@ import { } from '@mui/icons-material' import { Box, Typography, alpha, useTheme } from '@mui/material' import { useLockFn } from 'ahooks' -import React, { useRef, useState } from 'react' +import { useRef, useState } from 'react' import { useTranslation } from 'react-i18next' -import { DialogRef, Switch, TooltipIcon } from '@/components/base' +import { type DialogRef, Switch, TooltipIcon } from '@/components/base' import { SysproxyViewer } from '@/components/setting/mods/sysproxy-viewer' import { TunViewer } from '@/components/setting/mods/tun-viewer' import { useServiceUninstaller } from '@/hooks/use-service-uninstaller'