]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add cmds 'torrent-create' and 'torrent-metainfo-pprint' using nsf's libtorgo
authorMatt Joiner <anacrolix@gmail.com>
Thu, 19 Sep 2013 07:00:51 +0000 (17:00 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 19 Sep 2013 07:00:51 +0000 (17:00 +1000)
cmd/torrent-create/main.go [new file with mode: 0644]
cmd/torrent-metainfo-pprint/main.go [new file with mode: 0644]

diff --git a/cmd/torrent-create/main.go b/cmd/torrent-create/main.go
new file mode 100644 (file)
index 0000000..5bd7842
--- /dev/null
@@ -0,0 +1,59 @@
+package main
+
+import (
+       "flag"
+       "github.com/nsf/libtorgo/torrent"
+       "log"
+       "os"
+       "path/filepath"
+       "runtime"
+)
+
+var (
+       builtinAnnounceGroups = [][]string{{"udp://tracker.openbittorrent.com:80"}, {"udp://tracker.publicbt.com:80"}, {"udp://tracker.istole.it:6969"}}
+)
+
+func init() {
+       flag.Parse()
+       runtime.GOMAXPROCS(runtime.NumCPU())
+}
+
+func main() {
+       b := torrent.Builder{}
+       for _, filename := range flag.Args() {
+               if err := filepath.Walk(filename, func(path string, info os.FileInfo, err error) error {
+                       log.Print(path)
+                       if info.IsDir() {
+                               return nil
+                       }
+                       b.AddFile(path)
+                       return nil
+               }); err != nil {
+                       log.Print(err)
+               }
+       }
+       for _, group := range builtinAnnounceGroups {
+               b.AddAnnounceGroup(group)
+       }
+       batch, err := b.Submit()
+       if err != nil {
+               log.Fatal(err)
+       }
+       errs, status := batch.Start(os.Stdout, runtime.NumCPU())
+       lastProgress := int64(-1)
+       for {
+               select {
+               case err, ok := <-errs:
+                       if !ok || err == nil {
+                               return
+                       }
+                       log.Print(err)
+               case bytesDone := <-status:
+                       progress := 100 * bytesDone / batch.TotalSize()
+                       if progress != lastProgress {
+                               log.Printf("%d%%", progress)
+                               lastProgress = progress
+                       }
+               }
+       }
+}
diff --git a/cmd/torrent-metainfo-pprint/main.go b/cmd/torrent-metainfo-pprint/main.go
new file mode 100644 (file)
index 0000000..afe288f
--- /dev/null
@@ -0,0 +1,20 @@
+package main
+
+import (
+       "flag"
+       "fmt"
+       "github.com/nsf/libtorgo/torrent"
+       "log"
+)
+
+func main() {
+       flag.Parse()
+       for _, filename := range flag.Args() {
+               metainfo, err := torrent.LoadFromFile(filename)
+               if err != nil {
+                       log.Print(err)
+                       continue
+               }
+               fmt.Printf("%+#v\n", metainfo)
+       }
+}