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}
-
+
+