Skip to content

Commit cff11d6

Browse files
committed
my version
1 parent 9d99a9c commit cff11d6

File tree

1 file changed

+91
-35
lines changed

1 file changed

+91
-35
lines changed

main.go

Lines changed: 91 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,70 +6,126 @@ import (
66
"net/http"
77
"os"
88
"path/filepath"
9-
"text/template"
9+
"io"
10+
"bytes"
11+
"fmt"
12+
"strings"
1013
)
1114

12-
var listUrl = "https://ngosang.github.io/trackerslist/trackers_best.txt"
15+
var (
16+
trackerUrl = "https://cdn.jsdelivr.net/gh/ngosang/trackerslist/trackers_best_ip.txt"
17+
//trackerUrl = "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt" //need http proxy
18+
)
1319

14-
var tmpl = `bt-tracker={{range $k, $v := .}}{{if eq $k 0}}{{$v}}{{else}},{{$v}}{{end}}{{end}}
15-
enable-dht=true
16-
bt-enable-lpd=true
17-
enable-peer-exchange=true
18-
`
20+
func getTrackers() ([]string, error) {
21+
client := &http.Client{}
22+
request, err := http.NewRequest("GET", trackerUrl, nil)
23+
if err != nil {
24+
return nil, err
25+
}
26+
//add header
27+
request.Header.Add("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36")
1928

20-
func downloadList() ([]string, error) {
21-
resp, err := http.Get(listUrl)
29+
resp, err := client.Do(request)
2230
if err != nil {
2331
return nil, err
2432
}
2533
defer resp.Body.Close()
2634
rd := bufio.NewReader(resp.Body)
27-
res := []string{}
35+
trackers := []string{}
2836
for {
29-
line1, _, err := rd.ReadLine()
37+
line, _, err := rd.ReadLine()
3038
if err != nil {
3139
break
3240
}
33-
//fmt.Println("url:", string(line1), len(line1))
34-
if len(line1) > 0 {
35-
res = append(res, string(line1))
41+
if len(line) > 0 {
42+
trackers = append(trackers, string(line))
3643
}
3744
}
38-
return res, nil
45+
return trackers, nil
3946
}
4047

41-
func writeConf(data []string) error {
42-
home, err := os.UserHomeDir()
43-
if err != nil {
44-
return err
45-
}
46-
dir1 := filepath.Join(home, ".aria2")
47-
os.Mkdir(dir1, os.ModePerm)
48-
confPath := filepath.Join(home, ".aria2", "aria2.conf")
49-
fp, err := os.Create(confPath)
48+
func getConfFilePath() (string, error) {
49+
var (
50+
home string
51+
confPath string
52+
err error
53+
)
54+
home, err = os.UserHomeDir()
5055
if err != nil {
51-
return err
56+
return "", err
5257
}
53-
defer fp.Close()
54-
t := template.New("")
55-
t, err = t.Parse(tmpl)
56-
if err != nil {
57-
return err
58-
}
59-
return t.Execute(fp, data)
58+
confPath = filepath.Join(home, "aria2", "aria2.conf")
59+
return confPath, nil
60+
}
61+
62+
func updateConfFile(confPath string, trackers []string) error {
63+
var (
64+
err error
65+
file *os.File
66+
lineb []byte
67+
line string
68+
reader *bufio.Reader
69+
bufw *bytes.Buffer
70+
)
71+
72+
file, err = os.OpenFile(confPath, os.O_RDWR, 0666)
73+
if err != nil {
74+
fmt.Println("Open conf file error!", err)
75+
return err
76+
}
77+
defer file.Close()
78+
79+
reader = bufio.NewReader(file)
80+
bufw = new(bytes.Buffer)
81+
for {
82+
lineb, _, err = reader.ReadLine()
83+
if err != nil {
84+
if err == io.EOF {
85+
break
86+
} else {
87+
fmt.Println("Read file error!", err)
88+
return err
89+
}
90+
}
91+
line = string(lineb)
92+
if strings.HasPrefix(line, "bt-tracker") &&
93+
!strings.HasPrefix(line, "bt-tracker-") {
94+
line = "bt-tracker=" + strings.Join(trackers, ",") + "\n"
95+
}
96+
bufw.WriteString(line)
97+
bufw.WriteString("\n")
98+
}
99+
file.Seek(0, 0)
100+
_, err = file.WriteString(bufw.String())
101+
if err != nil {
102+
fmt.Println("Write conf file error!", err)
103+
return err
104+
}
105+
return nil
60106
}
61107

62108
func main() {
63109
flag.Parse()
64110
if len(flag.Arg(0)) > 0 {
65-
listUrl = flag.Arg(0)
111+
trackerUrl = flag.Arg(0)
112+
}
113+
var (
114+
trackers []string
115+
err error
116+
confPath string
117+
)
118+
trackers, err = getTrackers()
119+
if err != nil {
120+
panic(err.Error())
66121
}
67-
list1, err := downloadList()
122+
confPath, err = getConfFilePath()
68123
if err != nil {
69124
panic(err.Error())
70125
}
71-
err = writeConf(list1)
126+
err = updateConfFile(confPath, trackers)
72127
if err != nil {
73128
panic(err.Error())
74129
}
130+
fmt.Println("Update tracker success!")
75131
}

0 commit comments

Comments
 (0)