-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
73 lines (61 loc) · 1.28 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package main
import (
"log"
"os"
"sync"
"time"
)
var config Config
func main() {
config = parseFlags()
t := time.NewTicker(1000 * time.Millisecond)
defer t.Stop()
for {
log.Println("Checking plotting status")
plots := getPlotStatuses(config.URL, config.FarmerKey)
Downloads := make([]*Download, 0)
wg := sync.WaitGroup{}
for _, plot := range plots {
if plot.Progress == "100" && !plot.AwaitingRemoval {
log.Println("Plot [", plot.Id, "] is ready:", plot.Filename)
d := Download{
URL: UrlForPlotDownload(plot),
Filename: plot.Filename,
PlotID: plot.Id,
OutputDir: config.DestinationDir,
wg: &wg,
}
Downloads = append(Downloads, &d)
}
}
log.Println("Downloading", len(Downloads), "files")
for _, d := range Downloads {
wg.Add(1)
d.Start()
}
// start progress loop
done := make(chan struct{})
go func() {
for {
select {
case <-t.C:
for _, v := range Downloads {
log.Println(v.Status())
}
case <-done:
return
}
}
}()
// wait till all downloads finish
wg.Wait()
// stop progress loop
done <- struct{}{}
Status(Downloads)
if !config.Daemonize {
os.Exit(0)
}
log.Println("All done, re-checking for new plots")
time.Sleep(1 * time.Second)
}
}