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  }