github.com/khulnasoft-lab/tunnel-db@v0.0.0-20231117205118-74e1113bd007/pkg/utils/progress.go (about) 1 package utils 2 3 import ( 4 "time" 5 6 "github.com/briandowns/spinner" 7 pb "gopkg.in/cheggaaa/pb.v1" 8 ) 9 10 var ( 11 Quiet = false 12 ) 13 14 type Spinner struct { 15 client *spinner.Spinner 16 } 17 18 func NewSpinner(suffix string) *Spinner { 19 if Quiet { 20 return &Spinner{} 21 } 22 s := spinner.New(spinner.CharSets[36], 100*time.Millisecond) 23 s.Suffix = suffix 24 return &Spinner{client: s} 25 } 26 27 func (s *Spinner) Start() { 28 if s.client == nil { 29 return 30 } 31 s.client.Start() 32 } 33 func (s *Spinner) Stop() { 34 if s.client == nil { 35 return 36 } 37 s.client.Stop() 38 } 39 40 // TODO: Expose an interface for progressbar 41 type ProgressBar struct { 42 client *pb.ProgressBar 43 } 44 45 func PbStartNew(total int) *ProgressBar { 46 if Quiet { 47 return &ProgressBar{} 48 } 49 bar := pb.StartNew(total) 50 return &ProgressBar{client: bar} 51 } 52 53 func (p *ProgressBar) Increment() { 54 if p.client == nil { 55 return 56 } 57 p.client.Increment() 58 } 59 func (p *ProgressBar) Finish() { 60 if p.client == nil { 61 return 62 } 63 p.client.Finish() 64 }