From: Matt Joiner Date: Wed, 8 Nov 2017 08:33:05 +0000 (+1100) Subject: cmd/torrent-metainfo-pprint: Just take a single metainfo to stdin X-Git-Tag: v1.0.0~334 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=f960ec1b65eaecffbb1fe4401d6f23b56e7915c7;p=btrtrc.git cmd/torrent-metainfo-pprint: Just take a single metainfo to stdin Move processing into its own function too. --- diff --git a/cmd/torrent-metainfo-pprint/main.go b/cmd/torrent-metainfo-pprint/main.go index cce7be72..02865abc 100644 --- a/cmd/torrent-metainfo-pprint/main.go +++ b/cmd/torrent-metainfo-pprint/main.go @@ -4,13 +4,13 @@ import ( "encoding/hex" "encoding/json" "fmt" + "io" "log" "os" "github.com/anacrolix/tagflag" - "github.com/bradfitz/iter" - "github.com/anacrolix/torrent/metainfo" + "github.com/bradfitz/iter" ) var flags struct { @@ -18,50 +18,53 @@ var flags struct { PieceHashes bool Files bool tagflag.StartPos - TorrentFiles []string +} + +func processReader(r io.Reader) error { + metainfo, err := metainfo.Load(r) + if err != nil { + return err + } + info, err := metainfo.UnmarshalInfo() + if err != nil { + return fmt.Errorf("error unmarshalling info: %s", err) + } + if flags.JustName { + fmt.Printf("%s\n", info.Name) + return nil + } + d := map[string]interface{}{ + "Name": info.Name, + "NumPieces": info.NumPieces(), + "PieceLength": info.PieceLength, + "InfoHash": metainfo.HashInfoBytes().HexString(), + "NumFiles": len(info.UpvertedFiles()), + "TotalLength": info.TotalLength(), + "Announce": metainfo.Announce, + "AnnounceList": metainfo.AnnounceList, + "UrlList": metainfo.UrlList, + } + if flags.Files { + d["Files"] = info.Files + } + if flags.PieceHashes { + d["PieceHashes"] = func() (ret []string) { + for i := range iter.N(info.NumPieces()) { + ret = append(ret, hex.EncodeToString(info.Pieces[i*20:(i+1)*20])) + } + return + }() + } + b, _ := json.MarshalIndent(d, "", " ") + _, err = os.Stdout.Write(b) + return err } func main() { tagflag.Parse(&flags) - for _, filename := range flags.TorrentFiles { - metainfo, err := metainfo.LoadFromFile(filename) - if err != nil { - log.Print(err) - continue - } - info, err := metainfo.UnmarshalInfo() - if err != nil { - log.Printf("error unmarshalling info: %s", err) - continue - } - if flags.JustName { - fmt.Printf("%s\n", info.Name) - continue - } - d := map[string]interface{}{ - "Name": info.Name, - "NumPieces": info.NumPieces(), - "PieceLength": info.PieceLength, - "InfoHash": metainfo.HashInfoBytes().HexString(), - "NumFiles": len(info.UpvertedFiles()), - "TotalLength": info.TotalLength(), - "Announce": metainfo.Announce, - "AnnounceList": metainfo.AnnounceList, - "UrlList": metainfo.UrlList, - } - if flags.Files { - d["Files"] = info.Files - } - if flags.PieceHashes { - d["PieceHashes"] = func() (ret []string) { - for i := range iter.N(info.NumPieces()) { - ret = append(ret, hex.EncodeToString(info.Pieces[i*20:(i+1)*20])) - } - return - }() - } - b, _ := json.MarshalIndent(d, "", " ") - os.Stdout.Write(b) + err := processReader(os.Stdin) + if err != nil { + log.Fatal(err) } if !flags.JustName { os.Stdout.WriteString("\n")