feat(current-proxy-card): add toggle for automatic delay detection

This commit is contained in:
Slinetrac
2025-10-14 19:27:41 +08:00
parent 02b44d83af
commit 8760ed17dc
18 changed files with 60 additions and 2 deletions

View File

@@ -28,7 +28,7 @@
- 改进 Windows 和 Unix 的 服务连接方式以及权限,避免无法连接服务或内核
- 修改内核默认日志级别为 Info
- 支持通过桌面快捷方式重新打开应用
- 主界面“当前节点”卡片每 5 分钟自动测试延迟
- 主界面“当前节点”卡片新增自动延迟检测开关(默认关闭)
- 支持订阅界面输入链接后回车导入
### 🐞 修复问题

View File

@@ -131,6 +131,9 @@ pub struct IVerge {
/// 默认的延迟测试超时时间
pub default_latency_timeout: Option<i32>,
/// 是否自动检测当前节点延迟
pub enable_auto_delay_detection: Option<bool>,
/// 是否使用内部的脚本支持,默认为真
pub enable_builtin_enhanced: Option<bool>,
@@ -483,6 +486,7 @@ impl IVerge {
patch!(auto_check_update);
patch!(default_latency_test);
patch!(default_latency_timeout);
patch!(enable_auto_delay_detection);
patch!(enable_builtin_enhanced);
patch!(proxy_layout_column);
patch!(test_list);
@@ -568,6 +572,7 @@ pub struct IVergeResponse {
pub auto_check_update: Option<bool>,
pub default_latency_test: Option<String>,
pub default_latency_timeout: Option<i32>,
pub enable_auto_delay_detection: Option<bool>,
pub enable_builtin_enhanced: Option<bool>,
pub proxy_layout_column: Option<i32>,
pub test_list: Option<Vec<IVergeTestItem>>,
@@ -642,6 +647,7 @@ impl From<IVerge> for IVergeResponse {
auto_check_update: verge.auto_check_update,
default_latency_test: verge.default_latency_test,
default_latency_timeout: verge.default_latency_timeout,
enable_auto_delay_detection: verge.enable_auto_delay_detection,
enable_builtin_enhanced: verge.enable_builtin_enhanced,
proxy_layout_column: verge.proxy_layout_column,
test_list: verge.test_list,

View File

@@ -101,6 +101,7 @@ export const CurrentProxyCard = () => {
const theme = useTheme();
const { proxies, clashConfig, refreshProxy } = useAppData();
const { verge } = useVerge();
const autoDelayEnabled = verge?.enable_auto_delay_detection ?? false;
// 统一代理选择器
const { handleSelectChange } = useProxySelection({
@@ -452,6 +453,7 @@ export const CurrentProxyCard = () => {
useEffect(() => {
if (isDirectMode) return;
if (!autoDelayEnabled) return;
if (!state.selection.group || !state.selection.proxy) return;
let disposed = false;
@@ -481,6 +483,7 @@ export const CurrentProxyCard = () => {
isDirectMode,
state.selection.group,
state.selection.proxy,
autoDelayEnabled,
]);
// 自定义渲染选择框中的值

View File

@@ -29,6 +29,7 @@ export const MiscViewer = forwardRef<DialogRef>((props, ref) => {
autoCheckUpdate: true,
enableBuiltinEnhanced: true,
proxyLayoutColumn: 6,
enableAutoDelayDetection: false,
defaultLatencyTest: "",
autoLogClean: 2,
defaultLatencyTimeout: 10000,
@@ -45,6 +46,7 @@ export const MiscViewer = forwardRef<DialogRef>((props, ref) => {
autoCheckUpdate: verge?.auto_check_update ?? true,
enableBuiltinEnhanced: verge?.enable_builtin_enhanced ?? true,
proxyLayoutColumn: verge?.proxy_layout_column || 6,
enableAutoDelayDetection: verge?.enable_auto_delay_detection ?? false,
defaultLatencyTest: verge?.default_latency_test || "",
autoLogClean: verge?.auto_log_clean || 0,
defaultLatencyTimeout: verge?.default_latency_timeout || 10000,
@@ -61,6 +63,7 @@ export const MiscViewer = forwardRef<DialogRef>((props, ref) => {
auto_check_update: values.autoCheckUpdate,
enable_builtin_enhanced: values.enableBuiltinEnhanced,
proxy_layout_column: values.proxyLayoutColumn,
enable_auto_delay_detection: values.enableAutoDelayDetection,
default_latency_test: values.defaultLatencyTest,
default_latency_timeout: values.defaultLatencyTimeout,
auto_log_clean: values.autoLogClean as any,
@@ -265,6 +268,25 @@ export const MiscViewer = forwardRef<DialogRef>((props, ref) => {
</Select>
</ListItem>
<ListItem sx={{ padding: "5px 2px" }}>
<ListItemText
primary={t("Auto Delay Detection")}
sx={{ maxWidth: "fit-content" }}
/>
<TooltipIcon
title={t("Auto Delay Detection Info")}
sx={{ opacity: "0.7" }}
/>
<Switch
edge="end"
checked={values.enableAutoDelayDetection}
onChange={(_, c) =>
setValues((v) => ({ ...v, enableAutoDelayDetection: c }))
}
sx={{ marginLeft: "auto" }}
/>
</ListItem>
<ListItem sx={{ padding: "5px 2px" }}>
<ListItemText
primary={t("Default Latency Test")}

View File

@@ -327,6 +327,8 @@
"Auto Log Clean": "تنظيف السجلات تلقائيًا",
"Never Clean": "عدم التنظيف أبدًا",
"Retain _n Days": "الاحتفاظ لمدة {{n}} يومًا",
"Auto Delay Detection": "اكتشاف التأخير التلقائي",
"Auto Delay Detection Info": "يختبر زمن استجابة العقدة الحالية على نحو دوري في الخلفية",
"Default Latency Test": "اختبار التأخير الافتراضي",
"Default Latency Test Info": "يُستخدم فقط لاختبار طلب HTTP العميل. لن يؤثر على ملف التكوين",
"Default Latency Timeout": "مهلة التأخير الافتراضية",

View File

@@ -323,6 +323,8 @@
"Auto Log Clean": "Protokolle automatisch bereinigen",
"Never Clean": "Nie bereinigen",
"Retain _n Days": "{{n}} Tage behalten",
"Auto Delay Detection": "Automatische Latenzprüfung",
"Auto Delay Detection Info": "Überprüft regelmäßig im Hintergrund die Latenz des aktuellen Knotens",
"Default Latency Test": "Standard-Testlink",
"Default Latency Test Info": "Dies wird nur für HTTP-Client-Anfragentests verwendet und hat keine Auswirkungen auf die Konfigurationsdatei.",
"Default Latency Timeout": "Test-Timeout",

View File

@@ -374,6 +374,8 @@
"Auto Log Clean": "Auto Log Clean",
"Never Clean": "Never Clean",
"Retain _n Days": "Retain {{n}} Days",
"Auto Delay Detection": "Auto Delay Detection",
"Auto Delay Detection Info": "Periodically test the current node latency in the background",
"Default Latency Test": "Default Latency Test",
"Default Latency Test Info": "Used for HTTP client request testing only and won't make a difference to the configuration file",
"Default Latency Timeout": "Default Latency Timeout",

View File

@@ -323,6 +323,8 @@
"Auto Log Clean": "Limpiar registros automáticamente",
"Never Clean": "No limpiar",
"Retain _n Days": "Retener {{n}} días",
"Auto Delay Detection": "Detección automática de latencia",
"Auto Delay Detection Info": "Prueba periódicamente la latencia del nodo actual en segundo plano",
"Default Latency Test": "Enlace de prueba de latencia predeterminado",
"Default Latency Test Info": "Solo se utiliza para pruebas de solicitudes de clientes HTTP y no afectará al archivo de configuración.",
"Default Latency Timeout": "Tiempo de espera de la prueba de latencia",

View File

@@ -329,6 +329,8 @@
"Auto Log Clean": "پاکسازی خودکار لاگ",
"Never Clean": "هرگز پاک نکن",
"Retain _n Days": "نگهداری به مدت {{n}} روز",
"Auto Delay Detection": "تشخیص تأخیر خودکار",
"Auto Delay Detection Info": "به‌صورت دوره‌ای تأخیر گره فعلی را در پس‌زمینه آزمایش می‌کند",
"Default Latency Test": "آزمون تأخیر پیش‌فرض",
"Default Latency Test Info": "فقط برای تست درخواست‌های کلاینت HTTP استفاده می‌شود و بر فایل پیکربندی تأثیری نخواهد داشت",
"Default Latency Timeout": "زمان انتظار تأخیر پیش‌فرض",

View File

@@ -360,6 +360,8 @@
"Auto Log Clean": "Pembersihan Log Otomatis",
"Never Clean": "Jangan Pernah Bersihkan",
"Retain _n Days": "Simpan {{n}} Hari",
"Auto Delay Detection": "Deteksi Latensi Otomatis",
"Auto Delay Detection Info": "Secara berkala menguji latensi node saat ini di latar belakang",
"Default Latency Test": "Tes Latensi Default",
"Default Latency Test Info": "Digunakan hanya untuk pengujian permintaan klien HTTP dan tidak akan mempengaruhi file konfigurasi",
"Default Latency Timeout": "Waktu Habis Latensi Default",

View File

@@ -326,6 +326,8 @@
"Auto Log Clean": "ログを自動的にクリーンアップ",
"Never Clean": "クリーンアップしない",
"Retain _n Days": "{{n}}日間保持",
"Auto Delay Detection": "自動遅延検出",
"Auto Delay Detection Info": "バックグラウンドで現在のノードのレイテンシーを定期的にテストします",
"Default Latency Test": "デフォルトの遅延テストURL",
"Default Latency Test Info": "HTTPクライアントリクエストテストにのみ使用され、設定ファイルには影響しません。",
"Default Latency Timeout": "テストタイムアウト時間",

View File

@@ -398,5 +398,7 @@
"View Profile-Script": "프로필-스크립트 보기",
"View Profile-Merge": "프로필-병합 보기",
"Update Successful": "업데이트 성공",
"Update Failed": "업데이트 실패"
"Update Failed": "업데이트 실패",
"Auto Delay Detection": "자동 지연 감지",
"Auto Delay Detection Info": "백그라운드에서 현재 노드의 지연을 주기적으로 검사합니다"
}

View File

@@ -352,6 +352,8 @@
"Auto Log Clean": "Автоматическая очистка логов",
"Never Clean": "Никогда не очищать",
"Retain _n Days": "Сохранять {{n}} дней",
"Auto Delay Detection": "Автоматическое измерение задержки",
"Auto Delay Detection Info": "Периодически проверяет задержку текущего узла в фоновом режиме",
"Default Latency Test": "Ссылка на тест задержки",
"Default Latency Test Info": "Используется только для тестирования HTTP-запросов клиента и не влияет на файл конфигурации",
"Default Latency Timeout": "Таймаут задержки по умолчанию",

View File

@@ -350,6 +350,8 @@
"Auto Log Clean": "Otomatik Günlük Temizleme",
"Never Clean": "Asla Temizleme",
"Retain _n Days": "{{n}} Gün Sakla",
"Auto Delay Detection": "Otomatik Gecikme Tespiti",
"Auto Delay Detection Info": "Arka planda mevcut düğümün gecikmesini periyodik olarak test eder",
"Default Latency Test": "Varsayılan Gecikme Testi",
"Default Latency Test Info": "Yalnızca HTTP istemci isteği testi için kullanılır ve yapılandırma dosyasında bir fark yaratmaz",
"Default Latency Timeout": "Varsayılan Gecikme Zaman Aşımı",

View File

@@ -328,6 +328,8 @@
"Auto Log Clean": "Логларны автоматик чистарту",
"Never Clean": "Беркайчан чистартмаска",
"Retain _n Days": "{{n}} көн саклау",
"Auto Delay Detection": "Автоматик тоткарлык ачыклау",
"Auto Delay Detection Info": "Фон режимында хәзерге төен тоткарлыгын периодик тикшерә",
"Default Latency Test": "Тоткарлануны тикшерү сылтамасы (defaults)",
"Default Latency Test Info": "Бу фәкать клиентның HTTP сораулары тесты өчен кулланыла, конфигурация файлына йогынты ясамый",
"Default Latency Timeout": "Тоткарлануның стандарт таймауты",

View File

@@ -374,6 +374,8 @@
"Auto Log Clean": "自动清理日志",
"Never Clean": "不清理",
"Retain _n Days": "保留 {{n}} 天",
"Auto Delay Detection": "自动延迟检测",
"Auto Delay Detection Info": "后台定时检测当前节点延迟",
"Default Latency Test": "默认测试链接",
"Default Latency Test Info": "仅用于 HTTP 客户端请求测试,不会对配置文件产生影响",
"Default Latency Timeout": "测试超时时间",

View File

@@ -331,6 +331,8 @@
"Auto Log Clean": "自動清理日誌",
"Never Clean": "不清理",
"Retain _n Days": "保留 {{n}} 天",
"Auto Delay Detection": "自動延遲偵測",
"Auto Delay Detection Info": "在背景定時檢測當前節點延遲",
"Default Latency Test": "默認測試鏈接",
"Default Latency Test Info": "僅用於 HTTP 客戶端請求測試,不會對配置文件產生影響",
"Default Latency Timeout": "測試超時時間",

View File

@@ -850,6 +850,7 @@ interface IVergeConfig {
auto_check_update?: boolean;
default_latency_test?: string;
default_latency_timeout?: number;
enable_auto_delay_detection?: boolean;
enable_builtin_enhanced?: boolean;
auto_log_clean?: 0 | 1 | 2 | 3 | 4;
proxy_layout_column?: number;