]> Sergey Matveev's repositories - btrtrc.git/blob - cmd/torrent-create/main.go
Add cmd/torrent-create -u
[btrtrc.git] / cmd / torrent-create / main.go
1 package main
2
3 import (
4         "log"
5         "os"
6
7         "github.com/anacrolix/tagflag"
8
9         "github.com/anacrolix/torrent/bencode"
10         "github.com/anacrolix/torrent/metainfo"
11 )
12
13 var builtinAnnounceList = [][]string{
14         {"http://p4p.arenabg.com:1337/announce"},
15         {"udp://tracker.opentrackr.org:1337/announce"},
16         {"udp://tracker.openbittorrent.com:6969/announce"},
17 }
18
19 func main() {
20         log.SetFlags(log.Flags() | log.Lshortfile)
21         var args struct {
22                 AnnounceList      []string `name:"a" help:"extra announce-list tier entry"`
23                 EmptyAnnounceList bool     `name:"n" help:"exclude default announce-list entries"`
24                 Comment           string   `name:"t" help:"comment"`
25                 CreatedBy         string   `name:"c" help:"created by"`
26                 InfoName          *string  `name:"i" help:"override info name (defaults to ROOT)"`
27                 Url               []string `name:"u" help:"add webseed url"`
28                 tagflag.StartPos
29                 Root string
30         }
31         tagflag.Parse(&args, tagflag.Description("Creates a torrent metainfo for the file system rooted at ROOT, and outputs it to stdout."))
32         mi := metainfo.MetaInfo{
33                 AnnounceList: builtinAnnounceList,
34         }
35         if args.EmptyAnnounceList {
36                 mi.AnnounceList = make([][]string, 0)
37         }
38         for _, a := range args.AnnounceList {
39                 mi.AnnounceList = append(mi.AnnounceList, []string{a})
40         }
41         mi.SetDefaults()
42         if len(args.Comment) > 0 {
43                 mi.Comment = args.Comment
44         }
45         if len(args.CreatedBy) > 0 {
46                 mi.CreatedBy = args.CreatedBy
47         }
48         mi.UrlList = args.Url
49         info := metainfo.Info{
50                 PieceLength: 256 * 1024,
51         }
52         err := info.BuildFromFilePath(args.Root)
53         if err != nil {
54                 log.Fatal(err)
55         }
56         if args.InfoName != nil {
57                 info.Name = *args.InfoName
58         }
59         mi.InfoBytes, err = bencode.Marshal(info)
60         if err != nil {
61                 log.Fatal(err)
62         }
63         err = mi.Write(os.Stdout)
64         if err != nil {
65                 log.Fatal(err)
66         }
67 }