summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--progress.go27
3 files changed, 14 insertions, 19 deletions
diff --git a/go.mod b/go.mod
index 24fe437..d6390d4 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module gitlab.com/rhogenson/progress-bar
go 1.24.1
require (
- gitlab.com/rhogenson/vecdeque v0.0.0-20250406001322-9e21d75e8d13
+ gitlab.com/rhogenson/deque v0.0.0-20250406161547-43e0f85d8030
golang.org/x/term v0.31.0
)
diff --git a/go.sum b/go.sum
index c219b71..639cbcb 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,5 @@
-gitlab.com/rhogenson/vecdeque v0.0.0-20250406001322-9e21d75e8d13 h1:KzxZ53VHLj1w4DsYcbdIjNFPTcnc4UtBA79KoXkdgP0=
-gitlab.com/rhogenson/vecdeque v0.0.0-20250406001322-9e21d75e8d13/go.mod h1:i++skCmDHJAQbyC5LqvJbehbEGCiO8EkrsPon6h0Jgo=
+gitlab.com/rhogenson/deque v0.0.0-20250406161547-43e0f85d8030 h1:ElfzUwCcfm4HHxJkMfoEn5w8VOoI+XRYfa9Vdo7Plno=
+gitlab.com/rhogenson/deque v0.0.0-20250406161547-43e0f85d8030/go.mod h1:+JcaVhyJ7VgoRMo4PsMgOCDoVnIOLts4CkDEAYkU4o4=
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
diff --git a/progress.go b/progress.go
index 0f1a785..3a638ed 100644
--- a/progress.go
+++ b/progress.go
@@ -24,7 +24,7 @@ import (
"strings"
"time"
- "gitlab.com/rhogenson/vecdeque"
+ "gitlab.com/rhogenson/deque"
"golang.org/x/term"
)
@@ -36,8 +36,7 @@ type measurement struct {
// Bar is a progess bar.
type Bar struct {
max int
- measurements vecdeque.DQ[measurement]
- cols int
+ measurements deque.Deque[measurement]
secondPrint bool
}
@@ -48,8 +47,8 @@ func New(max int) *Bar {
// Set sets the current value to val.
func (b *Bar) Set(val int) {
// Measurements must be strictly increasing
- for b.measurements.Len() > 0 && b.measurements.Get(b.measurements.Len()-1).i > val {
- b.measurements.PopBack()
+ if b.measurements.Len() > 0 && b.measurements.At(b.measurements.Len()-1).i > val {
+ b.measurements.Reset()
}
b.measurements.PushBack(measurement{time.Now(), val})
}
@@ -61,11 +60,11 @@ func (b *Bar) Print() {
}
now := time.Now()
- for b.measurements.Len() > 2 && now.Sub(b.measurements.Get(0).t) > 2*time.Minute {
+ for b.measurements.Len() > 2 && now.Sub(b.measurements.At(0).t) > 2*time.Minute {
b.measurements.PopFront()
}
- first := b.measurements.Get(0)
- last := b.measurements.Get(b.measurements.Len() - 1)
+ first := b.measurements.At(0)
+ last := b.measurements.At(b.measurements.Len() - 1)
deltaT := last.t.Sub(first.t)
delta := last.i - first.i
eta := time.Duration(-1)
@@ -77,14 +76,10 @@ func (b *Bar) Print() {
fmt.Fprint(os.Stderr, "\033[2F\033[J")
}
b.secondPrint = true
- if b.cols == 0 {
- var err error
- if b.cols, _, err = term.GetSize(int(os.Stderr.Fd())); err != nil {
- fmt.Fprintf(os.Stderr, "Unable to determine terminal size: %s\n", err)
- }
- }
- p := last.i * b.cols / b.max
- if b.cols > 0 {
+ if cols, _, err := term.GetSize(int(os.Stderr.Fd())); err != nil {
+ fmt.Fprintf(os.Stderr, "Unable to determine terminal size: %s\n", err)
+ } else {
+ p := last.i * cols / b.max
fmt.Fprintf(os.Stderr, "%s>\n", strings.Repeat("=", max(p-1, 0)))
}
if eta < 0 {