github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/actor/v7action/progress_bar.go (about)

     1  package v7action
     2  
     3  import (
     4  	"gopkg.in/cheggaaa/pb.v1"
     5  	"io"
     6  	"os"
     7  	"time"
     8  )
     9  
    10  //go:generate counterfeiter . SimpleProgressBar
    11  
    12  type SimpleProgressBar interface {
    13  	Initialize(path string) (io.Reader, int64, error)
    14  	Terminate()
    15  }
    16  
    17  type ProgressBar struct {
    18  	bar *pb.ProgressBar
    19  }
    20  
    21  func NewProgressBar() *ProgressBar {
    22  	return &ProgressBar{}
    23  }
    24  
    25  func (p *ProgressBar) Initialize(path string) (io.Reader, int64, error) {
    26  	file, err := os.Open(path)
    27  	if err != nil {
    28  		return nil, 0, err
    29  	}
    30  
    31  	fileInfo, err := file.Stat()
    32  	if err != nil {
    33  		return nil, 0, err
    34  	}
    35  
    36  	p.bar = pb.New(int(fileInfo.Size())).SetUnits(pb.U_BYTES)
    37  	p.bar.ShowTimeLeft = false
    38  	p.bar.Start()
    39  	return p.bar.NewProxyReader(file), fileInfo.Size(), nil
    40  
    41  }
    42  
    43  func (p *ProgressBar) Terminate() {
    44  	// Adding sleep to ensure UI has finished drawing
    45  	time.Sleep(time.Second)
    46  	p.bar.Finish()
    47  }