From 2949987666d8b104ea305734fe5e159d97434240 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Sun, 6 Apr 2025 14:37:44 -0700 Subject: Bubbletea to make it pretty --- progress.go | 90 ------------------------------------------------------------- 1 file changed, 90 deletions(-) delete mode 100644 progress.go (limited to 'progress.go') diff --git a/progress.go b/progress.go deleted file mode 100644 index 3a638ed..0000000 --- a/progress.go +++ /dev/null @@ -1,90 +0,0 @@ -// Package progress implements a simple command line progress bar. -// -// Example: -// -// import ( -// time" -// -// "gitlab.com/rhogenson/progress-bar" -// ) -// -// func main() { -// b := progress.New(100) -// for i := range 100 { -// b.Set(i) -// b.Print() -// time.Sleep(time.Second) -// } -// } -package progress - -import ( - "fmt" - "os" - "strings" - "time" - - "gitlab.com/rhogenson/deque" - "golang.org/x/term" -) - -type measurement struct { - t time.Time - i int -} - -// Bar is a progess bar. -type Bar struct { - max int - measurements deque.Deque[measurement] - secondPrint bool -} - -func New(max int) *Bar { - return &Bar{max: max} -} - -// Set sets the current value to val. -func (b *Bar) Set(val int) { - // Measurements must be strictly increasing - if b.measurements.Len() > 0 && b.measurements.At(b.measurements.Len()-1).i > val { - b.measurements.Reset() - } - b.measurements.PushBack(measurement{time.Now(), val}) -} - -// Print shows the progress bar on standard error. -func (b *Bar) Print() { - if b.measurements.Len() == 0 { - return - } - - now := time.Now() - for b.measurements.Len() > 2 && now.Sub(b.measurements.At(0).t) > 2*time.Minute { - b.measurements.PopFront() - } - 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) - if delta != 0 { - eta = time.Duration(float64(b.max-last.i) / float64(delta) * float64(deltaT)) - } - - if b.secondPrint { - fmt.Fprint(os.Stderr, "\033[2F\033[J") - } - b.secondPrint = true - 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 { - fmt.Fprintln(os.Stderr, "ETA: calculating...") - } else { - fmt.Fprintf(os.Stderr, "ETA: %s\n", eta.Round(time.Second)) - } -} -- cgit v1.3.1