diff --git a/src/App.tsx b/src/App.tsx index c9558b0f..6c61cd54 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -30,12 +30,12 @@ export const App = () => {
- + diff --git a/src/components/Header.tsx b/src/components/Header.tsx index b3020527..878d52fa 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -65,7 +65,7 @@ const ThemeSwitcher = () => ( const navs = () => [ { - href: '/', + href: '/overview', name: 'Overview', icon: , }, diff --git a/src/pages/Proxies.tsx b/src/pages/Proxies.tsx index 6bed76ca..af5b553a 100644 --- a/src/pages/Proxies.tsx +++ b/src/pages/Proxies.tsx @@ -1,3 +1,4 @@ +import { IconBrandSpeedtest } from '@tabler/icons-solidjs' import { For, createSignal, onMount } from 'solid-js' import { twMerge } from 'tailwind-merge' import { useProxies } from '~/signals/proxies' @@ -10,6 +11,7 @@ export default () => { delayMap, updateProxy, setProxiesByProxyName, + delayTestByProxyGroupName, } = useProxies() const [collapseMap, setCollapseMap] = createSignal>( {}, @@ -40,6 +42,11 @@ export default () => { setCollapseMap({ ...cMap }) } + const onSpeedTestClick = (e: MouseEvent, name: string) => { + e.stopPropagation() + delayTestByProxyGroupName(name) + } + const getCollapseClassName = (name: string) => { return collapseMap()[name] ? 'collapse-open' : 'collapse-close' } @@ -59,10 +66,14 @@ export default () => { )} >
onCollapseTitleClick(proxy.name)} > {proxy.name} {proxy.type} + onSpeedTestClick(e, proxy.name)} + />
diff --git a/src/pages/Setup.tsx b/src/pages/Setup.tsx index 9e2e2e3b..6bc6d01e 100644 --- a/src/pages/Setup.tsx +++ b/src/pages/Setup.tsx @@ -82,7 +82,7 @@ export default () => { class="badge badge-info flex w-full cursor-pointer items-center gap-4 py-4" onClick={() => { setSelectedEndpoint(id) - navigate('/') + navigate('/overview') }} > {url} diff --git a/src/signals/proxies.ts b/src/signals/proxies.ts index 5ccc2e9c..fb6bf79c 100644 --- a/src/signals/proxies.ts +++ b/src/signals/proxies.ts @@ -31,11 +31,15 @@ export function useProxies() { const { proxies } = await request .get('proxies') .json<{ proxies: Record }>() + const sortIndex = proxies['GLOBAL'].all ?? [] setProxies( - Object.values(proxies).filter( - (proxy) => proxy.all && proxy.all.length > 0, - ), + Object.values(proxies) + .filter((proxy) => proxy.all && proxy.all.length > 0) + .sort( + (pre, next) => + sortIndex.indexOf(pre.name) - sortIndex.indexOf(next.name), + ), ) } @@ -48,9 +52,25 @@ export function useProxies() { await updateProxy() } + const delayTestByProxyGroupName = async (proxyGroupName: string) => { + const data: Record = await request + .get( + `group/${proxyGroupName}/delay?url=https%3A%2F%2Fwww.gstatic.com%2Fgenerate_204&timeout=2000`, + ) + .json() + const dMap = delayMap() + + Object.entries(data).forEach(([name, time]) => { + dMap[name] = time + }) + + setDelayMap({ ...dMap }) + } + return { proxies, proxyProviders, + delayTestByProxyGroupName, delayMap, updateProxy, setProxiesByProxyName,