From 5a1d99989fa32be1684b9290b4a58e8418b7b92d Mon Sep 17 00:00:00 2001
From: shenwc <spd260@126.com>
Date: 星期二, 26 十一月 2024 17:57:50 +0800
Subject: [PATCH] 11111

---
 progress/progress.go |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/progress/progress.go b/progress/progress.go
new file mode 100755
index 0000000..e7972b1
--- /dev/null
+++ b/progress/progress.go
@@ -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,
+	}
+}

--
Gitblit v1.8.0