github.com/hhsnopek/up@v0.1.1/internal/progressreader/progressreader.go (about) 1 // Package progressreader provides a reader progress bar. 2 package progressreader 3 4 import ( 5 "io" 6 "os" 7 8 "github.com/apex/up/internal/util" 9 progress "github.com/tj/go-progress" 10 "github.com/tj/go/term" 11 ) 12 13 // reader wrapping a progress bar. 14 type reader struct { 15 io.ReadCloser 16 p *progress.Bar 17 written int 18 } 19 20 // Read implementation. 21 func (r *reader) Read(b []byte) (int, error) { 22 n, err := r.ReadCloser.Read(b) 23 r.written += n 24 r.p.ValueInt(r.written) 25 io.WriteString(os.Stdout, term.CenterLine(r.p.String())) 26 return n, err 27 } 28 29 // New returns a progress bar reader. 30 func New(size int, r io.ReadCloser) io.ReadCloser { 31 return &reader{ 32 ReadCloser: r, 33 p: util.NewProgressInt(size), 34 } 35 }