From 2e30d8b9b71534424e1ea2844c70007655a419c4 Mon Sep 17 00:00:00 2001 From: huyunfan Date: Mon, 16 Dec 2024 13:17:39 +0800 Subject: [PATCH] modify rules order --- src/service/generate_config.go | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/service/generate_config.go b/src/service/generate_config.go index 31ed222..a90fd03 100644 --- a/src/service/generate_config.go +++ b/src/service/generate_config.go @@ -8,6 +8,7 @@ import ( "path/filepath" "proxyrules/src/aclgit" "regexp" + "sort" "strings" "time" @@ -114,6 +115,7 @@ func GenerateConfig() { addedDirectProxyList := append([]string{"DIRECT", "PROXY"}, proxyNameList...) addedProxyList := append([]string{"PROXY", "DIRECT"}, proxyNameList...) banProxyList := append([]string{"REJECT", "PROXY", "DIRECT"}, proxyNameList...) + // 添加 "DIRECT" 和 "PROXY" requireChoseList = RemoveDuplicates(requireChoseList) @@ -141,6 +143,9 @@ func GenerateConfig() { proxyGroups = append(proxyGroups, proxyGroup) } orderedGroupNames := []string{"AutoSelect", "PROXY", "Final", "OpenAi", "Claude", "ClaudeAI", "Gemini", "Telegram", "Bilibili", "BilibiliHMT", "Steam", "SteamCN", "SteamRegionCheck", "Porn", "Pornhub", "Pixiv", "JetBrains", "PrivateTracker", "Microsoft", "Bing", "Apple", "AppleNews", "AppleTV", "Github", "Google", "GoogleCNProxyIP", "GoogleEarth", "GoogleFCM", "Youtube", "YoutubeMusic", "Tiktok", "Instagram", "Line", "LineTV", "Wikipedia", "Zoom", "Epic", "MIUIPrivacy", "MI"} + + dealOrder(rulesList, orderedGroupNames) + proxyGroups = ReorderProxyGroups(proxyGroups, orderedGroupNames) // 更新配置中的 ProxyGroups config.ProxyGroups = proxyGroups @@ -315,6 +320,37 @@ func dealUserAgent(input []string) []string { } return output } +func getNameOrder(str string, order map[string]int) int { + // 分割字符串 + parts := strings.Split(str, ",") + for j := range parts { + parts[j] = strings.TrimSpace(parts[j]) // 去除空格 + } + + key := "" + // 获取排序键 + if len(parts) >= 3 { + key = parts[2] // 如果有第三部分,使用第三部分作为排序依据 + } + + // 如果存在于 order 中,返回值;否则返回最大值+1 + if val, exists := order[key]; exists { + return val + } else { + // 返回最大值+1 + maxVal := len(order) + 1 + return maxVal + } +} +func dealOrder(input []string, orderList []string) { + order := make(map[string]int) + for priv, name := range orderList { + order[name] = priv + 1 + } + sort.Slice(input, func(i, j int) bool { + return getNameOrder(input[i], order) < getNameOrder(input[j], order) + }) +} func Contains(slice []string, item string) bool { for _, element := range slice { if element == item {