golang的私有化定制自动更新插件
shenwc
2024-11-26 5a1d99989fa32be1684b9290b4a58e8418b7b92d
progress/progress.go
New file
@@ -0,0 +1,47 @@
// Package progress provides a proxy for download progress.
package progress
import (
   "io"
   "time"
   pb "github.com/gosuri/uiprogress"
)
// TODO: refactor to just check EOF
// reader wrapping a progress bar.
type reader struct {
   bars    *pb.Progress
   r       io.ReadCloser
   written int
}
// Read implementation.
func (r *reader) Read(b []byte) (int, error) {
   n, err := r.r.Read(b)
   r.written += n
   r.bars.Bars[0].Set(r.written)
   return n, err
}
// Close implementation.
func (r *reader) Close() error {
   r.bars.Stop()
   return r.r.Close()
}
// Reader returns a progress bar reader.
func Reader(size int, r io.ReadCloser) io.ReadCloser {
   bars := pb.New()
   bars.Width = 50
   bars.AddBar(size)
   bars.Start()
   bars.SetRefreshInterval(50 * time.Millisecond)
   bars.Bars[0].AppendCompleted()
   return &reader{
      bars: bars,
      r:    r,
   }
}