]> Sergey Matveev's repositories - btrtrc.git/blob - cmd/torrent-create/main.go
3177d6ce945b2dab7a9768d82010b205563afb6e
[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                 tagflag.StartPos
27                 Root string
28         }
29         tagflag.Parse(&args, tagflag.Description("Creates a torrent metainfo for the file system rooted at ROOT, and outputs it to stdout."))
30         mi := metainfo.MetaInfo{
31                 AnnounceList: builtinAnnounceList,
32         }
33         if args.EmptyAnnounceList {
34                 mi.AnnounceList = make([][]string, 0)
35         }
36         for _, a := range args.AnnounceList {
37                 mi.AnnounceList = append(mi.AnnounceList, []string{a})
38         }
39         mi.SetDefaults()
40         if len(args.Comment) > 0 {
41                 mi.Comment = args.Comment
42         }
43         if len(args.CreatedBy) > 0 {
44                 mi.CreatedBy = args.CreatedBy
45         }
46         info := metainfo.Info{
47                 PieceLength: 256 * 1024,
48         }
49         err := info.BuildFromFilePath(args.Root)
50         if err != nil {
51                 log.Fatal(err)
52         }
53         mi.InfoBytes, err = bencode.Marshal(info)
54         if err != nil {
55                 log.Fatal(err)
56         }
57         err = mi.Write(os.Stdout)
58         if err != nil {
59                 log.Fatal(err)
60         }
61 }