Skip to content

Commit 4c3714e

Browse files
committed
Update options parsing and usage string
1 parent e1e4f1c commit 4c3714e

File tree

1 file changed

+29
-14
lines changed

1 file changed

+29
-14
lines changed

mego.go

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package main
22

33
import (
44
"bytes"
5-
"flag"
65
"fmt"
76
"io"
87
"io/ioutil"
@@ -12,17 +11,18 @@ import (
1211
"regexp"
1312
"strings"
1413
"time"
15-
)
1614

17-
const (
18-
retryInterval = time.Minute
15+
"github.com/jessevdk/go-flags"
1916
)
2017

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+
}
2523

24+
var (
25+
opts options
2626
linkRegex = regexp.MustCompile(`^(?:https?://)?mega\.nz/#.+$`)
2727
)
2828

@@ -48,18 +48,18 @@ func isAlreadyDownloadedError(line, link string) bool {
4848

4949
func downloadRepeat(link string) {
5050
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)
5353
}
5454

5555
outLogger.Printf("Download of \"%s\" done.\n", link)
5656
}
5757

5858
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)
6060

6161
var errBuff bytes.Buffer
62-
if *pipeFlag {
62+
if opts.Pipe {
6363
cmd.Stdout = os.Stdout
6464
cmd.Stderr = io.MultiWriter(os.Stderr, &errBuff)
6565
} else {
@@ -132,9 +132,24 @@ func writeFilesList(path string, links []string) {
132132
}
133133

134134
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+
}
136151

137-
for _, arg := range flag.Args() {
152+
for _, arg := range args {
138153
if isValidLink(arg) {
139154
downloadRepeat(arg)
140155
} else {

0 commit comments

Comments
 (0)