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