From 9899b4cad260e5574b1df611777dbf11aa26d902 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sat, 19 May 2018 10:56:50 -0400 Subject: cow-dedupe: fixup statusline --- go/src/lib/statusline/async.go | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'go/src/lib/statusline/async.go') diff --git a/go/src/lib/statusline/async.go b/go/src/lib/statusline/async.go index 32c9a2b..5b509ac 100644 --- a/go/src/lib/statusline/async.go +++ b/go/src/lib/statusline/async.go @@ -7,27 +7,38 @@ import ( type AsyncStatusLine struct { lines chan string - end chan struct{} + end1 chan struct{} + end2 chan struct{} } func NewAsyncStatusLine(out io.Writer, d time.Duration) *AsyncStatusLine { ret := &AsyncStatusLine{ lines: make(chan string), - end: make(chan struct{}), + end1: make(chan struct{}), + end2: make(chan struct{}), } go func() { sl := NewStatusLine(out) ticker := time.NewTicker(d) - var line string + var oldLine string + var newLine string + dirty := false for { select { case <-ticker.C: - sl.Put(line) + if dirty && newLine != oldLine { + sl.Put(newLine) + dirty = false + } case l := <-ret.lines: - line = l - case <-ret.end: + newLine = l + dirty = true + case <-ret.end1: sl.End() ticker.Stop() + end2 <- struct{}{} + close(end2) + return } } }() @@ -39,7 +50,8 @@ func (sl *AsyncStatusLine) Put(line string) { } func (sl *AsyncStatusLine) End() { - sl.end <- struct{}{} + sl.end1 <- struct{}{} close(sl.lines) close(sl.end) + <-sl.end2 } -- cgit v1.2.3