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  }