]> Sergey Matveev's repositories - btrtrc.git/blob - internal/cmd/issue-465/main.go
Buff issue 465 test command
[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.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 }