11 "github.com/anacrolix/tagflag"
12 "github.com/bradfitz/iter"
14 "github.com/anacrolix/torrent/metainfo"
24 func processReader(r io.Reader) error {
25 metainfo, err := metainfo.Load(r)
29 info, err := metainfo.UnmarshalInfo()
31 return fmt.Errorf("error unmarshalling info: %s", err)
34 fmt.Printf("%s\n", info.Name)
37 d := map[string]interface{}{
39 "NumPieces": info.NumPieces(),
40 "PieceLength": info.PieceLength,
41 "InfoHash": metainfo.HashInfoBytes().HexString(),
42 "NumFiles": len(info.UpvertedFiles()),
43 "TotalLength": info.TotalLength(),
44 "Announce": metainfo.Announce,
45 "AnnounceList": metainfo.AnnounceList,
46 "UrlList": metainfo.UrlList,
49 d["Files"] = info.Files
51 if flags.PieceHashes {
52 d["PieceHashes"] = func() (ret []string) {
53 for i := range iter.N(info.NumPieces()) {
54 ret = append(ret, hex.EncodeToString(info.Pieces[i*20:(i+1)*20]))
59 b, _ := json.MarshalIndent(d, "", " ")
60 _, err = os.Stdout.Write(b)
66 err := processReader(os.Stdin)
71 os.Stdout.WriteString("\n")