@@ -2,7 +2,6 @@ package main
2
2
3
3
import (
4
4
"bytes"
5
- "flag"
6
5
"fmt"
7
6
"io"
8
7
"io/ioutil"
@@ -12,17 +11,18 @@ import (
12
11
"regexp"
13
12
"strings"
14
13
"time"
15
- )
16
14
17
- const (
18
- retryInterval = time .Minute
15
+ "github.com/jessevdk/go-flags"
19
16
)
20
17
21
- var (
22
- speedFlag = flag .Uint ("l" , 0 , "speed limit passed to megadl as --limit-speed" )
23
- pipeFlag = flag .Bool ("p" , false , "pipe megadl's stdout and stderr" )
24
- intervalFlag = flag .Duration ("r" , retryInterval , "interval between two retries" )
18
+ type options struct {
19
+ Speed uint `short:"s" long:"speed-limit" description:"Speed limit passed to megadl as --limit-speed" default:"0" value-name:"SPEED"`
20
+ Pipe bool `short:"p" long:"pipe-outputs" description:"Pipe megadl's stdout and stderr"`
21
+ Retry time.Duration `short:"r" long:"retry" description:"Interval between two retries" default:"1m" value-name:"INTERVAL"`
22
+ }
25
23
24
+ var (
25
+ opts options
26
26
linkRegex = regexp .MustCompile (`^(?:https?://)?mega\.nz/#.+$` )
27
27
)
28
28
@@ -48,18 +48,18 @@ func isAlreadyDownloadedError(line, link string) bool {
48
48
49
49
func downloadRepeat (link string ) {
50
50
for ! downloadCommand (link ) {
51
- errLogger .Printf ("Download of \" %s\" failed, waiting %s before retrying.\n " , link , retryInterval .String ())
52
- time .Sleep (* intervalFlag )
51
+ errLogger .Printf ("Download of \" %s\" failed, waiting %s before retrying.\n " , link , opts . Retry .String ())
52
+ time .Sleep (opts . Retry )
53
53
}
54
54
55
55
outLogger .Printf ("Download of \" %s\" done.\n " , link )
56
56
}
57
57
58
58
func downloadCommand (link string ) bool {
59
- cmd := exec .Command ("megadl" , fmt .Sprintf ("--limit-speed=%d" , * speedFlag ), link )
59
+ cmd := exec .Command ("megadl" , fmt .Sprintf ("--limit-speed=%d" , opts . Speed ), link )
60
60
61
61
var errBuff bytes.Buffer
62
- if * pipeFlag {
62
+ if opts . Pipe {
63
63
cmd .Stdout = os .Stdout
64
64
cmd .Stderr = io .MultiWriter (os .Stderr , & errBuff )
65
65
} else {
@@ -132,9 +132,24 @@ func writeFilesList(path string, links []string) {
132
132
}
133
133
134
134
func main () {
135
- flag .Parse ()
135
+ parser := flags .NewParser (& opts , flags .Default )
136
+ parser .Usage = "mego [-s SPEED] [-p] [-r INTERVAL] LINK... LINK_PATH..."
137
+
138
+ args , err := parser .Parse ()
139
+ if err != nil {
140
+ if flagsErr , ok := err .(* flags.Error ); ok && flagsErr .Type == flags .ErrHelp {
141
+ os .Exit (0 )
142
+ } else {
143
+ os .Exit (1 )
144
+ }
145
+ }
146
+
147
+ if len (args ) == 0 {
148
+ parser .WriteHelp (os .Stdout )
149
+ os .Exit (1 )
150
+ }
136
151
137
- for _ , arg := range flag . Args () {
152
+ for _ , arg := range args {
138
153
if isValidLink (arg ) {
139
154
downloadRepeat (arg )
140
155
} else {
0 commit comments