]> Sergey Matveev's repositories - btrtrc.git/blob - internal/cmd/issue-465/main.go
Add minimal reproducing code for issue 465
[btrtrc.git] / internal / cmd / issue-465 / main.go
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.Fprintln(os.Stderr, err)
16         }
17 }
18
19 func dlTorrents(dir string) error {
20         conf := torrent.NewDefaultClientConfig()
21         conf.DataDir = dir
22         cl, err := torrent.NewClient(conf)
23         if err != nil {
24                 return err
25         }
26         ids := []string{
27                 "urlteam_2021-02-03-21-17-02",
28                 "urlteam_2021-02-02-11-17-02",
29                 "urlteam_2021-01-31-11-17-02",
30                 "urlteam_2021-01-30-21-17-01",
31                 "urlteam_2021-01-29-21-17-01",
32                 "urlteam_2021-01-28-11-17-01",
33                 "urlteam_2021-01-27-11-17-02",
34                 "urlteam_2021-01-26-11-17-02",
35                 "urlteam_2021-01-25-03-17-02",
36                 "urlteam_2021-01-24-03-17-02",
37         }
38         for _, id := range ids {
39                 t, err := addTorrentFromURL(cl, fmt.Sprintf("https://archive.org/download/%s/%s_archive.torrent", id, id))
40                 if err != nil {
41                         return err
42                 }
43                 t.DownloadAll()
44         }
45         if !cl.WaitAll() {
46                 return errors.New("client stopped early")
47         }
48         return nil
49 }
50
51 func addTorrentFromURL(cl *torrent.Client, url string) (*torrent.Torrent, error) {
52         fmt.Printf("Adding torrent: %s\n", url)
53         resp, err := http.Get(url)
54         if err != nil {
55                 return nil, err
56         }
57         if resp.StatusCode != http.StatusOK {
58                 return nil, fmt.Errorf("status %s", resp.Status)
59         }
60         defer resp.Body.Close()
61         meta, err := metainfo.Load(resp.Body)
62         if err != nil {
63                 return nil, err
64         }
65         return cl.AddTorrent(meta)
66 }