From 280ddc172271e7b53d0d0c2cf0fa5c0e64a637a3 Mon Sep 17 00:00:00 2001 From: netscane <2498788665@qq.com> Date: Sat, 11 Sep 2021 00:08:26 +0800 Subject: [PATCH 1/2] fix bug --- main.go | 168 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 96 insertions(+), 72 deletions(-) diff --git a/main.go b/main.go index 1637c77..d2cd026 100644 --- a/main.go +++ b/main.go @@ -2,30 +2,30 @@ package main import ( "bufio" + "bytes" "flag" + "fmt" + "io" "net/http" "os" "path/filepath" "runtime" - "io" - "bytes" - "fmt" - "strings" + "strings" ) var ( - trackerUrl = "https://cdn.jsdelivr.net/gh/ngosang/trackerslist/trackers_best_ip.txt" - //trackerUrl = "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt" //need http proxy + trackerUrl = "https://cdn.jsdelivr.net/gh/ngosang/trackerslist/trackers_best_ip.txt" + //trackerUrl = "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt" //need http proxy ) func getTrackers() ([]string, error) { - client := &http.Client{} - request, err := http.NewRequest("GET", trackerUrl, nil) - if err != nil { - return nil, err - } - //add header - 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") + client := &http.Client{} + request, err := http.NewRequest("GET", trackerUrl, nil) + if err != nil { + return nil, err + } + //add header + 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") resp, err := client.Do(request) if err != nil { @@ -47,67 +47,86 @@ func getTrackers() ([]string, error) { } func getConfFilePath() (string, error) { - var ( - home string - confPath string - err error - ) + var ( + home string + confPath string + err error + ) home, err = os.UserHomeDir() if err != nil { return "", err } confPath = filepath.Join(home, "aria2", "aria2.conf") - return confPath, nil + return confPath, nil +} + +func readConfLines(confPath string) ([]string, error) { + var ( + lines []string + line string + line_bs []byte + file *os.File + reader *bufio.Reader + err error + ) + file, err = os.OpenFile(confPath, os.O_RDONLY, 0666) + reader = bufio.NewReader(file) + if err != nil { + fmt.Printf("open config file[%s] error!%v\n", confPath, err) + return nil, err + } + for { + line_bs, _, err = reader.ReadLine() + if err != nil { + if err == io.EOF { + break + } else { + fmt.Printf("read config file[%s] error!%v\n", confPath, err) + return nil, err + } + } + line = string(line_bs) + if strings.HasPrefix(line, "#") || strings.Index(line, "=") > 0 { + lines = append(lines, line) + } + } + return lines, nil } -func updateConfFile(confPath string, trackers []string) error { - var ( - err error - file *os.File - lineb []byte - line string - reader *bufio.Reader - bufw *bytes.Buffer - ) +func updateConfFile(confPath string, lines []string, trackers []string) error { + var ( + err error + file *os.File + line string + bufw *bytes.Buffer + ) - file, err = os.OpenFile(confPath, os.O_RDWR, 0666) - if err != nil { - fmt.Println("Open conf file error!", err) - return err - } - defer file.Close() + file, err = os.OpenFile(confPath, os.O_WRONLY|os.O_TRUNC, 0666) + if err != nil { + fmt.Printf("open config file[%s] error!%v\n", confPath, err) + return err + } + defer file.Close() - reader = bufio.NewReader(file) - bufw = new(bytes.Buffer) - for { - lineb, _, err = reader.ReadLine() - if err != nil { - if err == io.EOF { - break - } else { - fmt.Println("Read file error!", err) - return err - } - } - line = string(lineb) - if strings.HasPrefix(line, "bt-tracker") && - !strings.HasPrefix(line, "bt-tracker-") { - line = "bt-tracker=" + strings.Join(trackers, ",") - } - bufw.WriteString(line) - if "windows" == runtime.GOOS { - bufw.WriteString("\r\n") - }else{ - bufw.WriteString("\n") + bufw = new(bytes.Buffer) + for _, line = range lines { + if strings.HasPrefix(line, "bt-tracker") && + !strings.HasPrefix(line, "bt-tracker-") { + line = "bt-tracker=" + strings.Join(trackers, ",") + } + bufw.WriteString(line) + if "windows" == runtime.GOOS { + bufw.WriteString("\r\n") + } else { + bufw.WriteString("\n") + } } - } - file.Seek(0, 0) - _, err = file.WriteString(bufw.String()) - if err != nil { - fmt.Println("Write conf file error!", err) - return err - } - return nil + _, err = file.WriteString(bufw.String()) + if err != nil { + fmt.Printf("write conf file[%s] error!%v\n", confPath, err) + return err + } + return nil } func main() { @@ -115,22 +134,27 @@ func main() { if len(flag.Arg(0)) > 0 { trackerUrl = flag.Arg(0) } - var ( - trackers []string - err error - confPath string - ) + var ( + trackers []string + confLines []string + err error + confPath string + ) trackers, err = getTrackers() if err != nil { panic(err.Error()) } - confPath, err = getConfFilePath() + confPath, err = getConfFilePath() + if err != nil { + panic(err.Error()) + } + confLines, err = readConfLines(confPath) if err != nil { panic(err.Error()) } - err = updateConfFile(confPath, trackers) + err = updateConfFile(confPath, confLines, trackers) if err != nil { panic(err.Error()) } - fmt.Println("Update tracker success!") + fmt.Println("Update tracker success!") } From a84e6b92537d2caaba687584ce5cee1c8b98600a Mon Sep 17 00:00:00 2001 From: wangfs <2498788665@qq.com> Date: Thu, 11 Nov 2021 02:22:02 +0800 Subject: [PATCH 2/2] 2021-11-11 --- main.go | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/main.go b/main.go index d2cd026..c06d85e 100644 --- a/main.go +++ b/main.go @@ -14,13 +14,20 @@ import ( ) var ( - trackerUrl = "https://cdn.jsdelivr.net/gh/ngosang/trackerslist/trackers_best_ip.txt" + tracker_url string + default_tracker_url = "https://cdn.jsdelivr.net/gh/ngosang/trackerslist/trackers_best_ip.txt" + conf_path string //trackerUrl = "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt" //need http proxy ) +func init() { + flag.StringVar(&tracker_url, "tracker-url", default_tracker_url, "tracker url") + flag.StringVar(&conf_path, "conf-path", "", "aria2 conf path") +} + func getTrackers() ([]string, error) { client := &http.Client{} - request, err := http.NewRequest("GET", trackerUrl, nil) + request, err := http.NewRequest("GET", tracker_url, nil) if err != nil { return nil, err } @@ -46,18 +53,18 @@ func getTrackers() ([]string, error) { return trackers, nil } -func getConfFilePath() (string, error) { +func getDefaultConfPath() (string, error) { var ( - home string - confPath string - err error + home string + path string + err error ) home, err = os.UserHomeDir() if err != nil { return "", err } - confPath = filepath.Join(home, "aria2", "aria2.conf") - return confPath, nil + path = filepath.Join(home, ".aria2c", "aria2.conf") + return path, nil } func readConfLines(confPath string) ([]string, error) { @@ -117,8 +124,14 @@ func updateConfFile(confPath string, lines []string, trackers []string) error { bufw.WriteString(line) if "windows" == runtime.GOOS { bufw.WriteString("\r\n") + if !strings.HasPrefix(line, "#") { + bufw.WriteString("\r\n") + } } else { bufw.WriteString("\n") + if !strings.HasPrefix(line, "#") { + bufw.WriteString("\n") + } } } _, err = file.WriteString(bufw.String()) @@ -131,28 +144,26 @@ func updateConfFile(confPath string, lines []string, trackers []string) error { func main() { flag.Parse() - if len(flag.Arg(0)) > 0 { - trackerUrl = flag.Arg(0) - } var ( trackers []string confLines []string err error - confPath string ) - trackers, err = getTrackers() - if err != nil { - panic(err.Error()) + if len(conf_path) == 0 { + conf_path, err = getDefaultConfPath() + if err != nil { + panic(err.Error()) + } } - confPath, err = getConfFilePath() + trackers, err = getTrackers() if err != nil { panic(err.Error()) } - confLines, err = readConfLines(confPath) + confLines, err = readConfLines(conf_path) if err != nil { panic(err.Error()) } - err = updateConfFile(confPath, confLines, trackers) + err = updateConfFile(conf_path, confLines, trackers) if err != nil { panic(err.Error()) }