-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathrun.go
59 lines (48 loc) · 986 Bytes
/
run.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
package muget
import (
"context"
"fmt"
"path/filepath"
"golang.org/x/sync/errgroup"
)
type Range struct {
Start int
End int
}
func Run(url, outPutPath string) error {
size, err := CheckRanges(context.Background(), url)
if err != nil {
return err
}
var (
start, end int
ranges []Range
)
for start <= size {
end = start + (size / 10)
ranges = append(ranges, Range{
Start: start,
End: end,
})
start = end
}
// TODO: contextとかつかってうまくキャンセルしてあげる
eg := errgroup.Group{}
for i, r := range ranges {
i := i
r := r
eg.Go(func() error {
return DownloadFile(url, outPutPath, r.Start, r.End, i)
})
}
//ダウンロード完了まで待つ
if err := eg.Wait(); err != nil {
return err
}
fmt.Println("\nbinding with files...")
//ダウンロードファイルをマージ
if err := MergeFiles(len(ranges), filepath.Base(url), filepath.Ext(url)); err != nil {
return err
}
return nil
}