diff --git a/.prettierrc b/.prettierrc index a96ed658..90917442 100644 --- a/.prettierrc +++ b/.prettierrc @@ -11,6 +11,6 @@ "arrowParens": "always", "proseWrap": "preserve", "htmlWhitespaceSensitivity": "css", - "endOfLine": "lf", + "endOfLine": "auto", "embeddedLanguageFormatting": "auto" } diff --git a/src/components/proxy/proxy-groups.tsx b/src/components/proxy/proxy-groups.tsx index 57258766..70ed49a5 100644 --- a/src/components/proxy/proxy-groups.tsx +++ b/src/components/proxy/proxy-groups.tsx @@ -1,18 +1,20 @@ +import { ExpandMoreRounded } from "@mui/icons-material"; import { - Box, - Snackbar, Alert, + Box, Chip, - Typography, IconButton, Menu, MenuItem, + Snackbar, + Typography, } from "@mui/material"; -import { ExpandMoreRounded } from "@mui/icons-material"; import { useLockFn } from "ahooks"; -import { useRef, useState, useEffect, useCallback } from "react"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import { Virtuoso, type VirtuosoHandle } from "react-virtuoso"; +import useSWR from "swr"; +import { delayGroup, healthcheckProxyProvider } from "tauri-plugin-mihomo-api"; import { useProxySelection } from "@/hooks/use-proxy-selection"; import { useVerge } from "@/hooks/use-verge"; @@ -27,12 +29,9 @@ import { BaseEmpty } from "../base"; import { ScrollTopButton } from "../layout/scroll-top-button"; import { ProxyChain } from "./proxy-chain"; -import { ProxyRender } from "./proxy-render"; import { ProxyGroupNavigator } from "./proxy-group-navigator"; +import { ProxyRender } from "./proxy-render"; import { useRenderList } from "./use-render-list"; -import { delayGroup, healthcheckProxyProvider } from "tauri-plugin-mihomo-api"; -import useSWR from "swr"; -import { useMemo } from "react"; interface Props { mode: string; @@ -518,7 +517,7 @@ export const ProxyGroups = (props: Props) => { }, }} > - {availableGroups.map((group: any, index: number) => ( + {availableGroups.map((group: any, _index: number) => ( handleGroupSelect(group.name)} diff --git a/src/components/proxy/proxy-item-mini.tsx b/src/components/proxy/proxy-item-mini.tsx index aa6e9a6b..8e456f29 100644 --- a/src/components/proxy/proxy-item-mini.tsx +++ b/src/components/proxy/proxy-item-mini.tsx @@ -37,12 +37,12 @@ export const ProxyItemMini = (props: Props) => { return () => { delayManager.removeListener(proxy.name, group.name); }; - }, [proxy.name, group.name]); + }, [isPreset, proxy.name, group.name]); useEffect(() => { if (!proxy) return; setDelay(delayManager.getDelayFix(proxy, group.name)); - }, [proxy]); + }, [proxy, group.name]); const onDelay = useLockFn(async () => { setDelay(-2); @@ -200,7 +200,7 @@ export const ProxyItemMini = (props: Props) => { )} - {delay > 0 && ( + {delay >= 0 && ( // 显示延迟 { {delayManager.formatDelay(delay, timeout)} )} - {delay !== -2 && delay <= 0 && selected && ( + {proxy.type !== "Direct" && delay !== -2 && delay < 0 && selected && ( // 展示已选择的icon { try { diff --git a/src/main.tsx b/src/main.tsx index 32b2f5ac..2b723350 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -11,6 +11,7 @@ import { ComposeContextProvider } from "foxact/compose-context-provider"; import React from "react"; import { createRoot } from "react-dom/client"; import { BrowserRouter } from "react-router-dom"; +import { MihomoWebSocket } from "tauri-plugin-mihomo-api"; import { BaseErrorBoundary } from "./components/base"; import Layout from "./pages/_layout"; @@ -21,7 +22,6 @@ import { ThemeModeProvider, UpdateStateProvider, } from "./services/states"; -import { MihomoWebSocket } from "tauri-plugin-mihomo-api"; const mainElementId = "root"; const container = document.getElementById(mainElementId); diff --git a/src/pages/_layout.tsx b/src/pages/_layout.tsx index d9a26b48..52a03930 100644 --- a/src/pages/_layout.tsx +++ b/src/pages/_layout.tsx @@ -1,11 +1,10 @@ -import { List, Paper, ThemeProvider, SvgIcon } from "@mui/material"; +import { List, Paper, SvgIcon, ThemeProvider } from "@mui/material"; import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"; import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; -import { useEffect, useCallback, useState, useRef } from "react"; -import React from "react"; +import React, { useCallback, useEffect, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; -import { useLocation, useRoutes, useNavigate } from "react-router-dom"; +import { useLocation, useNavigate, useRoutes } from "react-router-dom"; import { SWRConfig, mutate } from "swr"; import iconDark from "@/assets/image/icon_dark.svg?react"; @@ -34,12 +33,12 @@ import { useClashInfo } from "@/hooks/use-clash"; import { invoke } from "@tauri-apps/api/core"; -import { showNotice } from "@/services/noticeService"; import { NoticeManager } from "@/components/base/NoticeManager"; -import { useMemoryData } from "@/hooks/use-memory-data"; -import { useTrafficData } from "@/hooks/use-traffic-data"; import { useConnectionData } from "@/hooks/use-connection-data"; import { useLogData } from "@/hooks/use-log-data-new"; +import { useMemoryData } from "@/hooks/use-memory-data"; +import { useTrafficData } from "@/hooks/use-traffic-data"; +import { showNotice } from "@/services/noticeService"; const appWindow = getCurrentWebviewWindow(); export const portableFlag = false; @@ -525,15 +524,15 @@ const Layout = () => { borderTopRightRadius: "0px", }} onContextMenu={(e) => { - if ( - OS === "windows" && - !["input", "textarea"].includes( - e.currentTarget.tagName.toLowerCase(), - ) && - !e.currentTarget.isContentEditable - ) { - e.preventDefault(); - } + // if ( + // OS === "windows" && + // !["input", "textarea"].includes( + // e.currentTarget.tagName.toLowerCase(), + // ) && + // !e.currentTarget.isContentEditable + // ) { + // e.preventDefault(); + // } }} sx={[ ({ palette }) => ({ bgcolor: palette.background.paper }), diff --git a/src/pages/proxies.tsx b/src/pages/proxies.tsx index 89416be7..f02068ba 100644 --- a/src/pages/proxies.tsx +++ b/src/pages/proxies.tsx @@ -3,6 +3,7 @@ import { useLockFn } from "ahooks"; import { useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import useSWR from "swr"; +import { closeAllConnections, getBaseConfig } from "tauri-plugin-mihomo-api"; import { BasePage } from "@/components/base"; import { ProviderButton } from "@/components/proxy/provider-button"; @@ -13,7 +14,6 @@ import { patchClashMode, updateProxyChainConfigInRuntime, } from "@/services/cmds"; -import { closeAllConnections, getBaseConfig } from "tauri-plugin-mihomo-api"; const ProxyPage = () => { const { t } = useTranslation(); diff --git a/src/services/delay.ts b/src/services/delay.ts index f807d1f4..bc190460 100644 --- a/src/services/delay.ts +++ b/src/services/delay.ts @@ -210,13 +210,13 @@ class DelayManager { formatDelay(delay: number, timeout = 10000) { if (delay === -1) return "-"; if (delay === -2) return "testing"; - if (delay >= timeout) return "timeout"; + if (delay === 0 || delay >= timeout) return "timeout"; return `${delay}`; } formatDelayColor(delay: number, timeout = 10000) { if (delay < 0) return ""; - if (delay >= timeout) return "error.main"; + if (delay === 0 || delay >= timeout) return "error.main"; if (delay >= 10000) return "error.main"; if (delay >= 400) return "warning.main"; if (delay >= 250) return "primary.main";