diff options
| author | 2026-03-08 14:15:38 +0800 | |
|---|---|---|
| committer | 2026-03-08 14:15:38 +0800 | |
| commit | c75a034d25ca87f3d209a8e82c743b8a7e96573b (patch) | |
| tree | d8cd5befb9d812ab622dcce094c9d30797d6d861 /internal/progress/render.go | |
| parent | *: BestEffortFprintf as linter wants (diff) | |
| signature | No signature | |
internal/progress: Add progress meter
Diffstat (limited to 'internal/progress/render.go')
| -rw-r--r-- | internal/progress/render.go | 34 |
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() + } +} |
