Просмотр исходного кода

fix: proxy providers not filtered in proxy groups

Howard Cheung 3 лет назад
Родитель
Сommit
cfc35e1028
1 измененных файлов с 32 добавлено и 1 удалено
  1. 32 1
      core/src/main/golang/native/tunnel/proxies.go

+ 32 - 1
core/src/main/golang/native/tunnel/proxies.go

@@ -96,7 +96,8 @@ func QueryProxyGroup(name string, sortMode SortMode, uiSubtitlePattern *regexp2.
 		return nil
 	}
 
-	proxies := collectProviders(g.Providers(), uiSubtitlePattern)
+	proxies := convertProxies(g.Proxies(), uiSubtitlePattern)
+	//proxies := collectProviders(g.Providers(), uiSubtitlePattern)
 
 	switch sortMode {
 	case Title:
@@ -162,6 +163,36 @@ func PatchSelector(selector, name string) bool {
 	return true
 }
 
+func convertProxies(proxies []C.Proxy, uiSubtitlePattern *regexp2.Regexp) []*Proxy {
+	result := make([]*Proxy, 0, 128)
+
+	for _, p := range proxies {
+		name := p.Name()
+		title := name
+		subtitle := p.Type().String()
+
+		if uiSubtitlePattern != nil {
+			if _, ok := p.(*adapter.Proxy).ProxyAdapter.(outboundgroup.ProxyGroup); !ok {
+				runes := []rune(name)
+				match, err := uiSubtitlePattern.FindRunesMatch(runes)
+				if err == nil && match != nil {
+					title = string(runes[:match.Index]) + string(runes[match.Index+match.Length:])
+					subtitle = string(runes[match.Index : match.Index+match.Length])
+				}
+			}
+		}
+
+		result = append(result, &Proxy{
+			Name:     name,
+			Title:    strings.TrimSpace(title),
+			Subtitle: strings.TrimSpace(subtitle),
+			Type:     p.Type().String(),
+			Delay:    int(p.LastDelay()),
+		})
+	}
+	return result
+}
+
 func collectProviders(providers []provider.ProxyProvider, uiSubtitlePattern *regexp2.Regexp) []*Proxy {
 	result := make([]*Proxy, 0, 128)