github.com/sleungcy-sap/cli@v7.1.0+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) Complete() { 23 // Adding sleep to ensure UI has finished drawing 24 time.Sleep(time.Second) 25 p.bar.Finish() 26 } 27 28 func (p *ProgressBar) NewProgressBarWrapper(reader io.Reader, sizeOfFile int64) io.Reader { 29 log.WithField("file_size", sizeOfFile).Debug("new progress bar") 30 31 ready, ok := <-p.ready 32 if !ready || !ok { 33 return nil 34 } 35 36 log.Debug("progress bar ready") 37 p.bar = pb.New(int(sizeOfFile)).SetUnits(pb.U_BYTES) 38 p.bar.ShowTimeLeft = false 39 p.bar.Start() 40 return p.bar.NewProxyReader(reader) 41 } 42 43 func (p *ProgressBar) Ready() { 44 p.ready <- true 45 }