From c897efa0e6fdffaae07091e18b3f851dab220c1f Mon Sep 17 00:00:00 2001 From: Jitendra Adhikari Date: Thu, 6 May 2021 19:28:29 +0700 Subject: [PATCH] feat(cmd.fast): add flag for upload speed, show spinner --- cmd/fast/main.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/cmd/fast/main.go b/cmd/fast/main.go index b3e1281..26bcdd0 100644 --- a/cmd/fast/main.go +++ b/cmd/fast/main.go @@ -1,9 +1,61 @@ package main import ( + "flag" + "fmt" + "log" + "sync" + "time" + "github.com/adhocore/fast/internal/fast" ) func main() { - fast.Run() + var noUp bool + var wg sync.WaitGroup + + flag.BoolVar(&noUp, "noup", false, "Do not show upload speed (shows only download speed)") + flag.Parse() + wg.Add(1) + + ch := make(chan bool) + + go doSpin(ch) + go doFast(ch, &wg, noUp) + + wg.Wait() +} + +func doSpin(ch chan bool) { + chars := []string{"+", "\\", "|", "/", "-", "+", "\\", "|", "/", "-"} + + for { + outer: + select { + case _, ok := <-ch: + if ok { + fmt.Print("\010") + break outer + } + default: + for _, c := range chars { + fmt.Print(c, "\010") + time.Sleep(50 * time.Millisecond) + } + } + } +} + +func doFast(ch chan bool, wg *sync.WaitGroup, noUp bool) { + defer wg.Done() + + start := time.Now() + res, err := fast.Measure(noUp) + ch <- true + + if err != nil { + log.Fatalf("error measuring speed: %v", err) + } + + fast.Out(res, start) }