-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathwalkSources.go
46 lines (43 loc) · 1013 Bytes
/
walkSources.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package main
import (
"regexp"
)
func mergeSources(data map[string]AddressData, dataNew map[string]AddressData) map[string]AddressData {
if len(data) == 0 {
return dataNew
}
// Merge dataNew into data
for str, addr := range dataNew {
orig, ok := data[str]
if !ok {
data[str] = addr
} else {
orig.Names = append(orig.Names, addr.Names...)
if addr.Class > orig.Class {
orig.Class = addr.Class
}
for i := range orig.ClassCount {
orig.ClassCount[i] += addr.ClassCount[i]
}
for i := range orig.ClassDate {
if addr.ClassDate[i] > orig.ClassDate[i] {
orig.ClassDate[i] = addr.ClassDate[i]
}
}
data[str] = orig
}
}
return data
}
func walkSources(
maildirs []string,
useraddresses []*regexp.Regexp,
customFilters []*regexp.Regexp,
) map[string]AddressData {
data := make(map[string]AddressData)
for _, maildir := range maildirs {
dataNew := walkMaildir(maildir, useraddresses, customFilters)
data = mergeSources(data, dataNew)
}
return data
}