]> Sergey Matveev's repositories - btrtrc.git/commitdiff
cmd/torrent-metainfo-pprint: Switch to tagflag for argument parsing
authorMatt Joiner <anacrolix@gmail.com>
Sun, 3 Apr 2016 06:37:17 +0000 (16:37 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 3 Apr 2016 06:37:17 +0000 (16:37 +1000)
cmd/torrent-metainfo-pprint/main.go

index 688d0664fdb7b8096bce257ae584603a7a4c9a06..9b62b2231ff90bd90cab1c94d3cf2f91b9d87183 100644 (file)
@@ -1,36 +1,55 @@
 package main
 
 import (
+       "encoding/hex"
        "encoding/json"
-       "flag"
        "fmt"
        "log"
        "os"
 
+       "github.com/anacrolix/tagflag"
+       "github.com/bradfitz/iter"
+
        "github.com/anacrolix/torrent/metainfo"
 )
 
+var flags struct {
+       JustName    bool
+       PieceHashes bool
+       tagflag.StartPos
+       TorrentFiles []string
+}
+
 func main() {
-       name := flag.Bool("name", false, "print name")
-       flag.Parse()
-       for _, filename := range flag.Args() {
+       tagflag.Parse(&flags)
+       for _, filename := range flags.TorrentFiles {
                metainfo, err := metainfo.LoadFromFile(filename)
                if err != nil {
                        log.Print(err)
                        continue
                }
-               if *name {
+               info := &metainfo.Info.Info
+               if flags.JustName {
                        fmt.Printf("%s\n", metainfo.Info.Name)
                        continue
                }
                d := map[string]interface{}{
-                       "Name":      metainfo.Info.Name,
-                       "NumPieces": metainfo.Info.NumPieces(),
+                       "Name":        info.Name,
+                       "NumPieces":   info.NumPieces(),
+                       "PieceLength": info.PieceLength,
+               }
+               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)
        }
-       if !*name {
+       if !flags.JustName {
                os.Stdout.WriteString("\n")
        }
 }