]> Sergey Matveev's repositories - btrtrc.git/blob - cmd/torrent-create/main.go
b5d3828f085b8981408f0626d3d29e55ceb5ca95
[btrtrc.git] / cmd / torrent-create / main.go
1 package main
2
3 import (
4         "flag"
5         "log"
6         "os"
7         "path/filepath"
8         "runtime"
9
10         torrent "github.com/anacrolix/libtorgo/metainfo"
11 )
12
13 var (
14         builtinAnnounceList = [][]string{
15                 {"udp://tracker.openbittorrent.com:80"},
16                 {"udp://tracker.publicbt.com:80"},
17                 {"udp://tracker.istole.it:6969"},
18         }
19 )
20
21 func init() {
22         flag.Parse()
23         runtime.GOMAXPROCS(runtime.NumCPU())
24 }
25
26 func main() {
27         b := torrent.Builder{}
28         for _, filename := range flag.Args() {
29                 if err := filepath.Walk(filename, func(path string, info os.FileInfo, err error) error {
30                         log.Print(path)
31                         if info.IsDir() {
32                                 return nil
33                         }
34                         b.AddFile(path)
35                         return nil
36                 }); err != nil {
37                         log.Print(err)
38                 }
39         }
40         for _, group := range builtinAnnounceList {
41                 b.AddAnnounceGroup(group)
42         }
43         batch, err := b.Submit()
44         if err != nil {
45                 log.Fatal(err)
46         }
47         errs, status := batch.Start(os.Stdout, runtime.NumCPU())
48         lastProgress := int64(-1)
49         for {
50                 select {
51                 case err, ok := <-errs:
52                         if !ok || err == nil {
53                                 return
54                         }
55                         log.Print(err)
56                 case bytesDone := <-status:
57                         progress := 100 * bytesDone / batch.TotalSize()
58                         if progress != lastProgress {
59                                 log.Printf("%d%%", progress)
60                                 lastProgress = progress
61                         }
62                 }
63         }
64 }