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 }