diff --git a/bar.go b/bar.go index a9c78d1..797460b 100644 --- a/bar.go +++ b/bar.go @@ -44,6 +44,7 @@ dropOnComplete bool noPop bool autoRefresh bool + manualRefresh bool aDecorators []decor.Decorator pDecorators []decor.Decorator averageDecorators []decor.AverageDecorator @@ -186,7 +187,7 @@ if s.current >= s.total { s.current = s.total s.completed = true - b.triggerCompletion(s.autoRefresh, s.refreshCh) + b.triggerCompletion(s) } else { s.triggerComplete = true } @@ -214,7 +215,7 @@ if triggerCompleteNow { s.current = s.total s.completed = true - b.triggerCompletion(s.autoRefresh, s.refreshCh) + b.triggerCompletion(s) } }: case <-b.done: @@ -232,7 +233,7 @@ if s.triggerComplete && s.current >= s.total { s.current = s.total s.completed = true - b.triggerCompletion(s.autoRefresh, s.refreshCh) + b.triggerCompletion(s) } }: case <-b.done: @@ -254,7 +255,7 @@ if s.triggerComplete && s.current >= s.total { s.current = s.total s.completed = true - b.triggerCompletion(s.autoRefresh, s.refreshCh) + b.triggerCompletion(s) } }: case <-b.done: @@ -282,7 +283,7 @@ if s.triggerComplete && s.current >= s.total { s.current = s.total s.completed = true - b.triggerCompletion(s.autoRefresh, s.refreshCh) + b.triggerCompletion(s) } }: case <-b.done: @@ -312,7 +313,7 @@ if s.triggerComplete && s.current >= s.total { s.current = s.total s.completed = true - b.triggerCompletion(s.autoRefresh, s.refreshCh) + b.triggerCompletion(s) } }: case <-b.done: @@ -350,7 +351,7 @@ } s.aborted = true s.dropOnComplete = drop - b.triggerCompletion(s.autoRefresh, s.refreshCh) + b.triggerCompletion(s) }: case <-b.done: } @@ -449,13 +450,13 @@ } } -func (b *Bar) triggerCompletion(autoRefresh bool, refreshCh chan<- time.Time) { - if autoRefresh { +func (b *Bar) triggerCompletion(s *bState) { + if s.autoRefresh { // Technically this call isn't required, but if refresh rate is set to // one hour for example and bar completes within a few minutes p.Wait() // will wait for one hour. This call helps to avoid unnecessary waiting. - go b.tryEarlyRefresh(refreshCh) - } else { + go b.tryEarlyRefresh(s.refreshCh) + } else if !s.manualRefresh { b.cancel() } } diff --git a/progress.go b/progress.go index 4668044..f65fea7 100644 --- a/progress.go +++ b/progress.go @@ -385,13 +385,14 @@ func (s *pState) makeBarState(total int64, filler BarFiller, options ...BarOption) *bState { bs := &bState{ - id: s.idCount, - priority: s.idCount, - reqWidth: s.reqWidth, - total: total, - filler: filler, - refreshCh: s.refreshCh, - autoRefresh: s.autoRefresh, + id: s.idCount, + priority: s.idCount, + reqWidth: s.reqWidth, + total: total, + filler: filler, + refreshCh: s.refreshCh, + autoRefresh: s.autoRefresh, + manualRefresh: s.manualRefresh, } if total > 0 {