@@ -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
62108func 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