aboutsummaryrefslogtreecommitdiff
path: root/internal/progress/render.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/render.go
parent*: BestEffortFprintf as linter wants (diff)
signatureNo signature
internal/progress: Add progress meter
Diffstat (limited to 'internal/progress/render.go')
-rw-r--r--internal/progress/render.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/internal/progress/render.go b/internal/progress/render.go
new file mode 100644
index 00000000..a2395d98
--- /dev/null
+++ b/internal/progress/render.go
@@ -0,0 +1,34 @@
+package progress
+
+import (
+ "strings"
+ "time"
+
+ "codeberg.org/lindenii/furgit/internal/utils"
+)
+
+func (meter *Meter) render(now time.Time, eol string) {
+ if meter.delay > 0 && now.Sub(meter.startedAt) < meter.delay && eol == "\r" {
+ return
+ }
+
+ meter.refreshThroughput(now)
+
+ counters := meter.renderCounters()
+ clear := 0
+ if len(counters) < meter.lastCounterW {
+ clear = meter.lastCounterW - len(counters) + 1
+ }
+ meter.lastCounterW = len(counters)
+
+ line := meter.title + ": " + counters
+ if clear > 0 {
+ line += strings.Repeat(" ", clear)
+ }
+ line += eol
+
+ utils.BestEffortFprintf(meter.writer, "%s", line)
+ if meter.flush != nil {
+ _ = meter.flush()
+ }
+}