mirror of
				https://github.com/bestnite/sub2clash.git
				synced 2025-11-03 20:30:35 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package common
 | 
						|
 | 
						|
import (
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"github.com/bestnite/sub2clash/model"
 | 
						|
	"github.com/bestnite/sub2clash/model/proxy"
 | 
						|
)
 | 
						|
 | 
						|
func GetContryName(countryKey string) string {
 | 
						|
 | 
						|
	countryMaps := []map[string]string{
 | 
						|
		model.CountryFlag,
 | 
						|
		model.CountryChineseName,
 | 
						|
		model.CountryISO,
 | 
						|
		model.CountryEnglishName,
 | 
						|
	}
 | 
						|
 | 
						|
	for i, countryMap := range countryMaps {
 | 
						|
		if i == 2 {
 | 
						|
 | 
						|
			splitChars := []string{"-", "_", " "}
 | 
						|
			key := make([]string, 0)
 | 
						|
			for _, splitChar := range splitChars {
 | 
						|
				slic := strings.Split(countryKey, splitChar)
 | 
						|
				for _, v := range slic {
 | 
						|
					if len(v) == 2 {
 | 
						|
						key = append(key, v)
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			for _, v := range key {
 | 
						|
 | 
						|
				if country, ok := countryMap[strings.ToUpper(v)]; ok {
 | 
						|
					return country
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		for k, v := range countryMap {
 | 
						|
			if strings.Contains(countryKey, k) {
 | 
						|
				return v
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return "其他地区"
 | 
						|
}
 | 
						|
 | 
						|
func AddProxy(
 | 
						|
	sub *model.Subscription, autotest bool,
 | 
						|
	lazy bool, clashType model.ClashType, proxies ...proxy.Proxy,
 | 
						|
) {
 | 
						|
	proxyTypes := model.GetSupportProxyTypes(clashType)
 | 
						|
 | 
						|
	for _, proxy := range proxies {
 | 
						|
		if !proxyTypes[proxy.Type] {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
		sub.Proxy = append(sub.Proxy, proxy)
 | 
						|
		haveProxyGroup := false
 | 
						|
		countryName := GetContryName(proxy.Name)
 | 
						|
		for i := range sub.ProxyGroup {
 | 
						|
			group := &sub.ProxyGroup[i]
 | 
						|
			if group.Name == countryName {
 | 
						|
				group.Proxies = append(group.Proxies, proxy.Name)
 | 
						|
				group.Size++
 | 
						|
				haveProxyGroup = true
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if !haveProxyGroup {
 | 
						|
			var newGroup model.ProxyGroup
 | 
						|
			if !autotest {
 | 
						|
				newGroup = model.ProxyGroup{
 | 
						|
					Name:          countryName,
 | 
						|
					Type:          "select",
 | 
						|
					Proxies:       []string{proxy.Name},
 | 
						|
					IsCountryGrop: true,
 | 
						|
					Size:          1,
 | 
						|
				}
 | 
						|
			} else {
 | 
						|
				newGroup = model.ProxyGroup{
 | 
						|
					Name:          countryName,
 | 
						|
					Type:          "url-test",
 | 
						|
					Proxies:       []string{proxy.Name},
 | 
						|
					IsCountryGrop: true,
 | 
						|
					Url:           "http://www.gstatic.com/generate_204",
 | 
						|
					Interval:      300,
 | 
						|
					Tolerance:     50,
 | 
						|
					Lazy:          lazy,
 | 
						|
					Size:          1,
 | 
						|
				}
 | 
						|
			}
 | 
						|
			sub.ProxyGroup = append(sub.ProxyGroup, newGroup)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |