]> Sergey Matveev's repositories - btrtrc.git/commitdiff
cmd/torrent-metainfo-pprint: Just take a single metainfo to stdin
authorMatt Joiner <anacrolix@gmail.com>
Wed, 8 Nov 2017 08:33:05 +0000 (19:33 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 8 Nov 2017 08:33:05 +0000 (19:33 +1100)
Move processing into its own function too.

cmd/torrent-metainfo-pprint/main.go

index cce7be72aecd5d32a1e9f8d1da6886135227afa6..02865abce93f33f4978fa1027a57f6ee9330961e 100644 (file)
@@ -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")