github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+incompatible/util/progressbar/progress_bar.go (about) 1 package progressbar 2 3 import ( 4 "io" 5 "time" 6 7 log "github.com/sirupsen/logrus" 8 pb "gopkg.in/cheggaaa/pb.v1" 9 ) 10 11 type ProgressBar struct { 12 ready chan bool 13 bar *pb.ProgressBar 14 } 15 16 func NewProgressBar() *ProgressBar { 17 return &ProgressBar{ 18 ready: make(chan bool), 19 } 20 } 21 22 func (p *ProgressBar) NewProgressBarWrapper(reader io.Reader, sizeOfFile int64) io.Reader { 23 log.WithField("file_size", sizeOfFile).Debug("new progress bar") 24 25 ready, ok := <-p.ready 26 if !ready || !ok { 27 return nil 28 } 29 30 log.Debug("progress bar ready") 31 p.bar = pb.New(int(sizeOfFile)).SetUnits(pb.U_BYTES) 32 p.bar.ShowTimeLeft = false 33 p.bar.Start() 34 return p.bar.NewProxyReader(reader) 35 } 36 37 func (p *ProgressBar) Ready() { 38 p.ready <- true 39 } 40 41 func (p *ProgressBar) Complete() { 42 // Adding sleep to ensure UI has finished drawing 43 time.Sleep(time.Second) 44 p.bar.Finish() 45 }