spinner.go 810 Bytes
Newer Older
Michael Yang's avatar
Michael Yang committed
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
package cmd

import (
	"fmt"
	"os"
	"time"

	"github.com/schollz/progressbar/v3"
)

type Spinner struct {
	description string
	*progressbar.ProgressBar
}

func NewSpinner(description string) *Spinner {
	return &Spinner{
		description: description,
		ProgressBar: progressbar.NewOptions(-1,
			progressbar.OptionSetWriter(os.Stderr),
			progressbar.OptionThrottle(60*time.Millisecond),
			progressbar.OptionSpinnerType(14),
			progressbar.OptionSetRenderBlankState(true),
			progressbar.OptionSetElapsedTime(false),
			progressbar.OptionClearOnFinish(),
			progressbar.OptionSetDescription(description),
		),
	}
}

func (s *Spinner) Spin(tick time.Duration) {
	for range time.Tick(tick) {
		if s.IsFinished() {
			break
		}

		s.Add(1)
	}
}

func (s *Spinner) Stop() {
	s.Finish()
	fmt.Println(s.description)
}