aboutsummaryrefslogtreecommitdiff
path: root/cmd/progress/progress.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/progress/progress.go')
-rw-r--r--cmd/progress/progress.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/cmd/progress/progress.go b/cmd/progress/progress.go
new file mode 100644
index 0000000..c461c01
--- /dev/null
+++ b/cmd/progress/progress.go
@@ -0,0 +1,50 @@
+package main
+
+import (
+ "image/color"
+ "io"
+ "time"
+
+ "dim13.org/blinkstick"
+)
+
+var (
+ red = color.YCbCr{0x1f, 0x00, 0xff}
+ yellow = color.YCbCr{0x3f, 0x00, 0xbf}
+ green = color.YCbCr{0x1f, 0x00, 0x00}
+ blue = color.YCbCr{0x1f, 0xff, 0x1f}
+ black = color.Black
+)
+
+type Progress struct {
+ f []color.Color
+ start time.Time
+ soft time.Duration
+ hard time.Duration
+ end time.Duration
+ n int
+}
+
+func NewProgress(soft, hard, end time.Duration) Progress {
+ return Progress{
+ f: make([]color.Color, 8),
+ start: time.Now(),
+ soft: soft,
+ hard: hard,
+ end: end,
+ }
+}
+
+func (p *Progress) Update(w io.Writer) {
+ done := time.Since(p.start)
+ switch {
+ case p.hard < done:
+ p.f[p.n] = red
+ case p.soft < done:
+ p.f[p.n] = yellow
+ default:
+ p.f[p.n] = green
+ }
+ blinkstick.Set(w, p.f...)
+ p.n = (p.n + 1) % 8
+}