]> Sergey Matveev's repositories - btrtrc.git/blob - cmd/torrent/create.go
8f4440c44c15e96391c030bf3a75590a4b086c27
[btrtrc.git] / cmd / torrent / create.go
1 package main
2
3 import (
4         "github.com/anacrolix/bargle"
5         "github.com/anacrolix/tagflag"
6         "github.com/anacrolix/torrent/bencode"
7         "github.com/anacrolix/torrent/metainfo"
8         "os"
9 )
10
11 var builtinAnnounceList = [][]string{
12         {"http://p4p.arenabg.com:1337/announce"},
13         {"udp://tracker.opentrackr.org:1337/announce"},
14         {"udp://tracker.openbittorrent.com:6969/announce"},
15 }
16
17 func create() (cmd bargle.Command) {
18         var args struct {
19                 AnnounceList      []string `name:"a" help:"extra announce-list tier entry"`
20                 EmptyAnnounceList bool     `name:"n" help:"exclude default announce-list entries"`
21                 Comment           string   `name:"t" help:"comment"`
22                 CreatedBy         string   `name:"c" help:"created by"`
23                 InfoName          *string  `name:"i" help:"override info name (defaults to ROOT)"`
24                 PieceLength       tagflag.Bytes
25                 Url               []string `name:"u" help:"add webseed url"`
26                 Private           *bool
27                 Root              string `arg:"positional"`
28         }
29         cmd = bargle.FromStruct(&args)
30         cmd.Desc = "Creates a torrent metainfo for the file system rooted at ROOT, and outputs it to stdout"
31         cmd.DefaultAction = func() (err error) {
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: args.PieceLength.Int64(),
51                         Private:     args.Private,
52                 }
53                 err = info.BuildFromFilePath(args.Root)
54                 if err != nil {
55                         return
56                 }
57                 if args.InfoName != nil {
58                         info.Name = *args.InfoName
59                 }
60                 mi.InfoBytes, err = bencode.Marshal(info)
61                 if err != nil {
62                         return
63                 }
64                 err = mi.Write(os.Stdout)
65                 return
66         }
67         return
68 }