1 // Downloads torrents from the command-line.
8 "github.com/anacrolix/bargle"
9 "github.com/anacrolix/envpprof"
10 xprometheus "github.com/anacrolix/missinggo/v2/prometheus"
11 "github.com/prometheus/client_golang/prometheus"
12 "github.com/prometheus/client_golang/prometheus/promhttp"
16 prometheus.MustRegister(xprometheus.NewExpvarCollector())
17 http.Handle("/metrics", promhttp.Handler())
21 defer stdLog.SetFlags(stdLog.Flags() | stdLog.Lshortfile)
23 main.Defer(envpprof.Stop)
25 main.Options = append(main.Options, bargle.Flag{Longs: []string{"debug"}, Value: &debug})
26 main.Positionals = append(main.Positionals,
27 bargle.Subcommand{Name: "metainfo", Command: metainfoCmd()},
28 //bargle.Subcommand{Name: "announce", Command: func() bargle.Command {
29 // var cmd AnnounceCmd
30 // err := p.NewParser().AddParams(
31 // args.Pos("tracker", &cmd.Tracker),
32 // args.Pos("infohash", &cmd.InfoHash)).Parse()
36 // return announceErr(cmd)
38 //bargle.Subcommand{Name: "scrape", Command: func() bargle.Command {
40 // err := p.NewParser().AddParams(
41 // args.Pos("tracker", &cmd.Tracker),
42 // args.Pos("infohash", &cmd.InfoHashes, args.Arity('+'))).Parse()
48 bargle.Subcommand{Name: "download", Command: func() bargle.Command {
50 cmd := bargle.FromStruct(&dlc)
51 cmd.DefaultAction = func() error {
52 return downloadErr(downloadFlags{
59 //bargle.Subcommand{Name:
60 // "bencode", Command: func() bargle.Command {
61 // var print func(interface{}) error
63 // args.Subcommand("json", func(ctx args.SubCmdCtx) (err error) {
65 // je := json.NewEncoder(os.Stdout)
66 // je.SetIndent("", " ")
70 // args.Subcommand("spew", func(ctx args.SubCmdCtx) (err error) {
72 // config := spew.NewDefaultConfig()
73 // config.DisableCapacities = true
74 // config.Indent = " "
75 // print = func(v interface{}) error {
82 // return errors.New("an output type is required")
84 // d := bencode.NewDecoder(os.Stdin)
85 // p.Defer(func() error {
86 // for i := 0; ; i++ {
88 // err := d.Decode(&v)
93 // return fmt.Errorf("decoding message index %d: %w", i, err)
101 // Desc: "reads bencoding from stdin into Go native types and spews the result",
103 //bargle.Subcommand{Name: "version", Command: func() bargle.Command {
104 // fmt.Printf("HTTP User-Agent: %q\n", version.DefaultHttpUserAgent)
105 // fmt.Printf("Torrent client version: %q\n", version.DefaultExtendedHandshakeClientVersion)
106 // fmt.Printf("Torrent version prefix: %q\n", version.DefaultBep20Prefix)
109 bargle.Subcommand{Name: "serve", Command: serve(), Desc: "creates and seeds a torrent from a filepath"},