github.com/anacrolix/torrent@v1.61.0/internal/cmd/issue-465/main.go (about) 1 package main 2 3 import ( 4 "errors" 5 "fmt" 6 "net/http" 7 "os" 8 9 "github.com/anacrolix/torrent" 10 "github.com/anacrolix/torrent/metainfo" 11 ) 12 13 func main() { 14 if err := dlTorrents("."); err != nil { 15 fmt.Fprintf(os.Stderr, "fatal error: %v\n", err) 16 os.Exit(1) 17 } 18 } 19 20 func dlTorrents(dir string) error { 21 conf := torrent.NewDefaultClientConfig() 22 conf.DataDir = dir 23 cl, err := torrent.NewClient(conf) 24 if err != nil { 25 return err 26 } 27 http.HandleFunc("/torrentClientStatus", func(w http.ResponseWriter, r *http.Request) { 28 cl.WriteStatus(w) 29 }) 30 ids := []string{ 31 "urlteam_2021-02-03-21-17-02", 32 "urlteam_2021-02-02-11-17-02", 33 "urlteam_2021-01-31-11-17-02", 34 "urlteam_2021-01-30-21-17-01", 35 "urlteam_2021-01-29-21-17-01", 36 "urlteam_2021-01-28-11-17-01", 37 "urlteam_2021-01-27-11-17-02", 38 "urlteam_2021-01-26-11-17-02", 39 "urlteam_2021-01-25-03-17-02", 40 "urlteam_2021-01-24-03-17-02", 41 } 42 for _, id := range ids { 43 t, err := addTorrentFromURL(cl, fmt.Sprintf("https://archive.org/download/%s/%s_archive.torrent", id, id)) 44 if err != nil { 45 return fmt.Errorf("downloading metainfo for %q: %w", id, err) 46 } 47 t.DownloadAll() 48 } 49 if !cl.WaitAll() { 50 return errors.New("client stopped early") 51 } 52 return nil 53 } 54 55 func addTorrentFromURL(cl *torrent.Client, url string) (*torrent.Torrent, error) { 56 fmt.Printf("Adding torrent: %s\n", url) 57 resp, err := http.Get(url) 58 if err != nil { 59 return nil, err 60 } 61 if resp.StatusCode != http.StatusOK { 62 return nil, fmt.Errorf("status %s", resp.Status) 63 } 64 defer resp.Body.Close() 65 meta, err := metainfo.Load(resp.Body) 66 if err != nil { 67 return nil, err 68 } 69 return cl.AddTorrent(meta) 70 }