From 2a9d48d09fe3c86e82a463833783aa3b17112209 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Thu, 19 Sep 2013 17:00:51 +1000 Subject: [PATCH] Add cmds 'torrent-create' and 'torrent-metainfo-pprint' using nsf's libtorgo --- cmd/torrent-create/main.go | 59 +++++++++++++++++++++++++++++ cmd/torrent-metainfo-pprint/main.go | 20 ++++++++++ 2 files changed, 79 insertions(+) create mode 100644 cmd/torrent-create/main.go create mode 100644 cmd/torrent-metainfo-pprint/main.go diff --git a/cmd/torrent-create/main.go b/cmd/torrent-create/main.go new file mode 100644 index 00000000..5bd78425 --- /dev/null +++ b/cmd/torrent-create/main.go @@ -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 index 00000000..afe288fa --- /dev/null +++ b/cmd/torrent-metainfo-pprint/main.go @@ -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) + } +} -- 2.48.1