diff --git a/web/src/lib/components/mihomo/mihomo-proxy-groups.svelte b/web/src/lib/components/mihomo/mihomo-proxy-groups.svelte index a6aa937..f47e0f4 100644 --- a/web/src/lib/components/mihomo/mihomo-proxy-groups.svelte +++ b/web/src/lib/components/mihomo/mihomo-proxy-groups.svelte @@ -19,13 +19,22 @@ /** Увеличьте, чтобы принудительно перезагрузить список снаружи. */ refreshNonce = 0, /** Состояние загрузки для индикатора у родителя. */ - onLoadingChange + onLoadingChange, + /** Увеличьте — проверить задержку для всех групп (флот: кнопка в шапке карточки). */ + delayAllNonce = 0, + /** Не показывать «Все задержки» внутри группы (кнопка на родителе). */ + hideCompactPerGroupDelayButton = false, + /** Идёт проверка задержек по всем группам. */ + onDelayAllChange }: { alias: string; compact?: boolean; hideToolbar?: boolean; refreshNonce?: number; onLoadingChange?: (loading: boolean) => void; + delayAllNonce?: number; + hideCompactPerGroupDelayButton?: boolean; + onDelayAllChange?: (busy: boolean) => void; } = $props(); const MIHOMO_DELAY_DEFAULT_URL = 'https://www.gstatic.com/generate_204'; @@ -150,6 +159,23 @@ testingGroup = null; } } + + $effect(() => { + const a = alias; + const n = delayAllNonce; + if (!a || n <= 0) return; + const groupsSnapshot = untrack(() => [...selectableGroups]); + void (async () => { + untrack(() => onDelayAllChange?.(true)); + try { + for (const [gName] of groupsSnapshot) { + await pingGroup(gName); + } + } finally { + untrack(() => onDelayAllChange?.(false)); + } + })(); + }); {#if !hideToolbar} @@ -202,11 +228,11 @@ {#each selectableGroups as [gName, group] (gName)} {#if compact}
-
+
{gName} @@ -215,15 +241,17 @@ {group.now ?? '—'}
- + {#if !hideCompactPerGroupDelayButton} + + {/if}
{#each group.all ?? [] as nodeName (nodeName)} @@ -232,10 +260,10 @@ {@const active = group.now === nodeName}
@@ -298,7 +326,7 @@ onclick={() => pingGroup(gName)} disabled={testingGroup === gName} > - {testingGroup === gName ? 'Проверка…' : 'Проверить все'} + {testingGroup === gName ? 'Проверка…' : 'Все задержки'}
diff --git a/web/src/routes/mihomo/+page.svelte b/web/src/routes/mihomo/+page.svelte index 57d85c0..5096359 100644 --- a/web/src/routes/mihomo/+page.svelte +++ b/web/src/routes/mihomo/+page.svelte @@ -51,12 +51,18 @@ let pollTimer: ReturnType | null = null; /** Принудительная перезагрузка /proxies для карточки ноды. */ let proxyRefreshNonce = $state>({}); + let proxyDelayAllNonce = $state>({}); let nodeProxyLoading = $state>({}); + let nodeDelayAllBusy = $state>({}); function bumpProxyRefresh(a: string) { proxyRefreshNonce = { ...proxyRefreshNonce, [a]: (proxyRefreshNonce[a] ?? 0) + 1 }; } + function bumpProxyDelayAll(a: string) { + proxyDelayAllNonce = { ...proxyDelayAllNonce, [a]: (proxyDelayAllNonce[a] ?? 0) + 1 }; + } + let withMihomo = $derived(rows.filter((r) => r.metaStatus === 'ok').length); let aliveCount = $derived(rows.filter((r) => r.metaStatus === 'ok' && r.alive).length); let sumConn = $derived( @@ -334,8 +340,8 @@

Прокси по нодам

- Автозагрузка групп. Клик по узлу — выбор; иконка справа — проверка задержки. Обновление списка — в - шапке карточки. + Автозагрузка групп. В шапке: «Все задержки» и обновление списка. Клик по узлу — выбор; справа — + проверка одного узла.

{/if} - + +