]> Sergey Matveev's repositories - btrtrc.git/blob - cmd/torrent-metainfo-pprint/main.go
dbd7ea75801282e971a48c8a0296e74c54b9a7cb
[btrtrc.git] / cmd / torrent-metainfo-pprint / main.go
1 package main
2
3 import (
4         "encoding/hex"
5         "encoding/json"
6         "fmt"
7         "log"
8         "os"
9
10         "github.com/anacrolix/tagflag"
11         "github.com/bradfitz/iter"
12
13         "github.com/anacrolix/torrent/metainfo"
14 )
15
16 var flags struct {
17         JustName    bool
18         PieceHashes bool
19         Files       bool
20         tagflag.StartPos
21         TorrentFiles []string
22 }
23
24 func main() {
25         tagflag.Parse(&flags)
26         for _, filename := range flags.TorrentFiles {
27                 metainfo, err := metainfo.LoadFromFile(filename)
28                 if err != nil {
29                         log.Print(err)
30                         continue
31                 }
32                 info := &metainfo.Info.Info
33                 if flags.JustName {
34                         fmt.Printf("%s\n", metainfo.Info.Name)
35                         continue
36                 }
37                 d := map[string]interface{}{
38                         "Name":        info.Name,
39                         "NumPieces":   info.NumPieces(),
40                         "PieceLength": info.PieceLength,
41                         "InfoHash":    metainfo.Info.Hash.HexString(),
42                         "NumFiles":    len(info.UpvertedFiles()),
43                         "TotalLength": info.TotalLength(),
44                 }
45                 if flags.Files {
46                         d["Files"] = info.Files
47                 }
48                 if flags.PieceHashes {
49                         d["PieceHashes"] = func() (ret []string) {
50                                 for i := range iter.N(info.NumPieces()) {
51                                         ret = append(ret, hex.EncodeToString(info.Pieces[i*20:(i+1)*20]))
52                                 }
53                                 return
54                         }()
55                 }
56                 b, _ := json.MarshalIndent(d, "", "  ")
57                 os.Stdout.Write(b)
58         }
59         if !flags.JustName {
60                 os.Stdout.WriteString("\n")
61         }
62 }