aboutsummaryrefslogtreecommitdiff
path: root/internal/progress/set.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-08 14:15:38 +0800
committerGravatar Runxi Yu2026-03-08 14:15:38 +0800
commitc75a034d25ca87f3d209a8e82c743b8a7e96573b (patch)
treed8cd5befb9d812ab622dcce094c9d30797d6d861 /internal/progress/set.go
parent*: BestEffortFprintf as linter wants (diff)
signatureNo signature
internal/progress: Add progress meter
Diffstat (limited to 'internal/progress/set.go')
-rw-r--r--internal/progress/set.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/internal/progress/set.go b/internal/progress/set.go
new file mode 100644
index 00000000..3a580a63
--- /dev/null
+++ b/internal/progress/set.go
@@ -0,0 +1,30 @@
+package progress
+
+import "time"
+
+// Set records current progress and renders when percent changed or the 1s tick
+// elapsed.
+func (meter *Meter) Set(done uint64, bytes uint64) {
+ meter.lastDone = done
+ meter.lastBytes = bytes
+ meter.sawValue = true
+
+ if meter.writer == nil {
+ return
+ }
+
+ now := time.Now()
+ forced := meter.consumeUpdateTick(now)
+
+ percentChanged := false
+ if meter.total > 0 {
+ percent := int(done * 100 / meter.total)
+ percentChanged = percent != meter.lastPercent
+ }
+
+ if !percentChanged && !forced {
+ return
+ }
+
+ meter.render(now, "\r")
+}