import useSWR from "swr"; import { useRef } from "react"; import { useTranslation } from "react-i18next"; import { IconButton, Switch } from "@mui/material"; import { ArrowForward, PrivacyTipRounded, Settings } from "@mui/icons-material"; import { checkService } from "@/services/cmds"; import { useVerge } from "@/hooks/use-verge"; import { DialogRef } from "@/components/base"; import { SettingList, SettingItem } from "./mods/setting-comp"; import { GuardState } from "./mods/guard-state"; import { ServiceViewer } from "./mods/service-viewer"; import { SysproxyViewer } from "./mods/sysproxy-viewer"; import getSystem from "@/utils/get-system"; interface Props { onError?: (err: Error) => void; } const isWIN = getSystem() === "windows"; const SettingSystem = ({ onError }: Props) => { const { t } = useTranslation(); const { verge, mutateVerge, patchVerge } = useVerge(); // service mode const { data: serviceStatus } = useSWR( isWIN ? "checkService" : null, checkService, { revalidateIfStale: false, shouldRetryOnError: false, focusThrottleInterval: 36e5, // 1 hour } ); const serviceRef = useRef(null); const sysproxyRef = useRef(null); const { enable_tun_mode, enable_auto_launch, enable_service_mode, enable_silent_start, enable_system_proxy, } = verge ?? {}; const onSwitchFormat = (_e: any, value: boolean) => value; const onChangeData = (patch: Partial) => { mutateVerge({ ...verge, ...patch }, false); }; return ( {isWIN && ( )} onChangeData({ enable_tun_mode: e })} onGuard={(e) => patchVerge({ enable_tun_mode: e })} > {isWIN && ( serviceRef.current?.open()} > } > onChangeData({ enable_service_mode: e })} onGuard={(e) => patchVerge({ enable_service_mode: e })} > )} sysproxyRef.current?.open()} > } > onChangeData({ enable_system_proxy: e })} onGuard={(e) => patchVerge({ enable_system_proxy: e })} > onChangeData({ enable_auto_launch: e })} onGuard={(e) => patchVerge({ enable_auto_launch: e })} > onChangeData({ enable_silent_start: e })} onGuard={(e) => patchVerge({ enable_silent_start: e })} > ); }; export default SettingSystem;