]> Sergey Matveev's repositories - btrtrc.git/blob - cmd/torrent-create/main.go
d36dd0b5a9699cf884139f3567cf8e3f1f40caae
[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 (
14         builtinAnnounceList = [][]string{
15                 {"udp://tracker.openbittorrent.com:80"},
16                 {"udp://tracker.publicbt.com:80"},
17                 {"udp://tracker.istole.it:6969"},
18         }
19 )
20
21 func main() {
22         log.SetFlags(log.Flags() | log.Lshortfile)
23         var args struct {
24                 AnnounceList      []string `name:"a" help:"extra announce-list tier entry"`
25                 EmptyAnnounceList bool     `name:"n" help:"exclude default announce-list entries"`
26                 Comment           string   `name:"t" help:"comment"`
27                 CreatedBy         string   `name:"c" help:"created by"`
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         info := metainfo.Info{
49                 PieceLength: 256 * 1024,
50         }
51         err := info.BuildFromFilePath(args.Root)
52         if err != nil {
53                 log.Fatal(err)
54         }
55         mi.InfoBytes, err = bencode.Marshal(info)
56         if err != nil {
57                 log.Fatal(err)
58         }
59         err = mi.Write(os.Stdout)
60         if err != nil {
61                 log.Fatal(err)
62         }
63 }