12 "github.com/anacrolix/envpprof"
13 "github.com/anacrolix/tagflag"
14 "github.com/anacrolix/torrent/metainfo"
15 "github.com/bradfitz/iter"
25 func processReader(r io.Reader) error {
26 metainfo, err := metainfo.Load(r)
30 info, err := metainfo.UnmarshalInfo()
32 return fmt.Errorf("error unmarshalling info: %s", err)
35 fmt.Printf("%s\n", info.Name)
38 d := map[string]interface{}{
40 "NumPieces": info.NumPieces(),
41 "PieceLength": info.PieceLength,
42 "InfoHash": metainfo.HashInfoBytes().HexString(),
43 "NumFiles": len(info.UpvertedFiles()),
44 "TotalLength": info.TotalLength(),
45 "Announce": metainfo.Announce,
46 "AnnounceList": metainfo.AnnounceList,
47 "UrlList": metainfo.UrlList,
50 d["Files"] = info.Files
52 if flags.PieceHashes {
53 d["PieceHashes"] = func() (ret []string) {
54 for i := range iter.N(info.NumPieces()) {
55 ret = append(ret, hex.EncodeToString(info.Pieces[i*20:(i+1)*20]))
60 b, _ := json.MarshalIndent(d, "", " ")
61 _, err = os.Stdout.Write(b)
68 err := processReader(bufio.NewReader(os.Stdin))
73 os.Stdout.WriteString("\n")