From 0bb1790206beec655a3f50e88b356a1596c7b4bd Mon Sep 17 00:00:00 2001
From: GyDi <zzzgydi@gmail.com>
Date: Fri, 11 Nov 2022 01:21:23 +0800
Subject: [PATCH] fix: provider proxy sort by delay

---
 src/components/proxy/proxy-item.tsx     | 12 +-----------
 src/components/proxy/use-filter-sort.ts |  6 +++---
 src/services/delay.ts                   | 11 +++++++++++
 3 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/src/components/proxy/proxy-item.tsx b/src/components/proxy/proxy-item.tsx
index 7ad6fbd..14ebbe8 100644
--- a/src/components/proxy/proxy-item.tsx
+++ b/src/components/proxy/proxy-item.tsx
@@ -59,17 +59,7 @@ const ProxyItem = (props: Props) => {
 
   useEffect(() => {
     if (!proxy) return;
-
-    if (!proxy.provider) {
-      setDelay(delayManager.getDelay(proxy.name, groupName));
-      return;
-    }
-
-    const { history = [] } = proxy;
-    if (history.length > 0) {
-      // 0ms以error显示
-      setDelay(history[history.length - 1].delay || 1e6);
-    }
+    setDelay(delayManager.getDelayFix(proxy, groupName));
   }, [proxy]);
 
   const onDelay = useLockFn(async () => {
diff --git a/src/components/proxy/use-filter-sort.ts b/src/components/proxy/use-filter-sort.ts
index 3171b0f..2a0ce70 100644
--- a/src/components/proxy/use-filter-sort.ts
+++ b/src/components/proxy/use-filter-sort.ts
@@ -61,7 +61,7 @@ function filterProxies(
       symbol2 === "error" ? 1e5 : symbol2 === "timeout" ? 3000 : +symbol2;
 
     return proxies.filter((p) => {
-      const delay = delayManager.getDelay(p.name, groupName);
+      const delay = delayManager.getDelayFix(p, groupName);
 
       if (delay < 0) return false;
       if (symbol === "=" && symbol2 === "error") return delay >= 1e5;
@@ -98,8 +98,8 @@ function sortProxies(
 
   if (sortType === 1) {
     list.sort((a, b) => {
-      const ad = delayManager.getDelay(a.name, groupName);
-      const bd = delayManager.getDelay(b.name, groupName);
+      const ad = delayManager.getDelayFix(a, groupName);
+      const bd = delayManager.getDelayFix(b, groupName);
 
       if (ad === -1 || ad === -2) return 1;
       if (bd === -1 || bd === -2) return -1;
diff --git a/src/services/delay.ts b/src/services/delay.ts
index 7c24b02..502b5e1 100644
--- a/src/services/delay.ts
+++ b/src/services/delay.ts
@@ -55,6 +55,17 @@ class DelayManager {
     return -1;
   }
 
+  /// 暂时修复provider的节点延迟排序的问题
+  getDelayFix(proxy: ApiType.ProxyItem, group: string) {
+    if (!proxy.provider) return this.getDelay(proxy.name, group);
+
+    if (proxy.history.length > 0) {
+      // 0ms以error显示
+      return proxy.history[proxy.history.length - 1].delay || 1e6;
+    }
+    return -1;
+  }
+
   async checkDelay(name: string, group: string) {
     let delay = -1;
 
-- 
GitLab