Skip to content

Commit ca971cc

Browse files
author
V2RaySSR综合网
committed
添加域名去重功能和统一警告样式
- 添加域名去重功能,避免重复检测相同域名 - 新增重复域名警告,带时间戳显示 - 统一重复域名和无效域名的警告样式 - 优化域名解析逻辑,同时处理格式验证和去重 - 改进用户体验,提供更清晰的警告信息
1 parent d023da5 commit ca971cc

File tree

1 file changed

+53
-8
lines changed

1 file changed

+53
-8
lines changed

internal/cmd/batch.go

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
// executeBatch 执行批量检测
1111
func (r *RootCmd) executeBatch(domainsStr string) {
1212
// 解析域名列表
13-
domains, invalidDomains := parseDomains(domainsStr)
13+
domains, invalidDomains, duplicateDomains := parseDomains(domainsStr)
1414

1515
if len(domains) == 0 {
1616
fmt.Println()
@@ -22,9 +22,31 @@ func (r *RootCmd) executeBatch(domainsStr string) {
2222

2323
ui.PrintBanner()
2424

25-
// 显示无效域名警告(在横幅下面)
25+
// 显示重复域名警告(在横幅下面)
26+
if len(duplicateDomains) > 0 {
27+
ui.PrintTimestampedMessage("警告:发现 %d 个重复域名,已去重:", len(duplicateDomains))
28+
29+
// 只显示前5个重复域名,避免显示过多
30+
displayCount := 5
31+
if len(duplicateDomains) < displayCount {
32+
displayCount = len(duplicateDomains)
33+
}
34+
35+
for i := 0; i < displayCount; i++ {
36+
fmt.Printf(" - %s\n", duplicateDomains[i])
37+
}
38+
39+
// 如果还有更多重复域名,显示省略提示
40+
if len(duplicateDomains) > displayCount {
41+
fmt.Printf(" ... 还有 %d 个重复域名\n", len(duplicateDomains)-displayCount)
42+
}
43+
44+
fmt.Println()
45+
}
46+
47+
// 显示无效域名警告
2648
if len(invalidDomains) > 0 {
27-
fmt.Printf("警告:发现 %d 个无效域名,已跳过:\n", len(invalidDomains))
49+
ui.PrintTimestampedMessage("警告:发现 %d 个无效域名,已跳过:", len(invalidDomains))
2850

2951
// 只显示前5个无效域名,避免显示过多
3052
displayCount := 5
@@ -55,10 +77,13 @@ func (r *RootCmd) executeBatch(domainsStr string) {
5577
// 详细结果已在batch manager中打印,无需重复
5678
}
5779

58-
// parseDomains 解析域名列表,返回有效域名和无效域名
59-
func parseDomains(domainsStr string) ([]string, []string) {
80+
// parseDomains 解析域名列表,返回有效域名、无效域名和重复域名
81+
func parseDomains(domainsStr string) ([]string, []string, []string) {
6082
var validDomains []string
6183
var invalidDomains []string
84+
var duplicateDomains []string
85+
domainSet := make(map[string]bool) // 用于去重
86+
duplicateSet := make(map[string]bool) // 用于记录重复域名
6287

6388
// 支持空格分隔的域名列表
6489
fields := strings.Fields(domainsStr)
@@ -69,11 +94,31 @@ func parseDomains(domainsStr string) ([]string, []string) {
6994
}
7095

7196
if isValidDomain(domain) {
72-
validDomains = append(validDomains, domain)
97+
// 检查是否已存在,避免重复
98+
if !domainSet[domain] {
99+
validDomains = append(validDomains, domain)
100+
domainSet[domain] = true
101+
} else {
102+
// 记录重复的有效域名
103+
if !duplicateSet[domain] {
104+
duplicateDomains = append(duplicateDomains, domain)
105+
duplicateSet[domain] = true
106+
}
107+
}
73108
} else {
74-
invalidDomains = append(invalidDomains, domain)
109+
// 无效域名也去重
110+
if !domainSet[domain] {
111+
invalidDomains = append(invalidDomains, domain)
112+
domainSet[domain] = true
113+
} else {
114+
// 记录重复的无效域名
115+
if !duplicateSet[domain] {
116+
duplicateDomains = append(duplicateDomains, domain)
117+
duplicateSet[domain] = true
118+
}
119+
}
75120
}
76121
}
77-
return validDomains, invalidDomains
122+
return validDomains, invalidDomains, duplicateDomains
78123
}
79124

0 commit comments

Comments
 (0)