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