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  }