Codebase list golang-github-vbauerster-mpb / 4733ec9
force refresh last uncompleted bar Vladimir Bauer 4 years ago
2 changed file(s) with 38 addition(s) and 9 deletion(s). Raw diff Collapse all Expand all
173173 if s.triggerComplete && !s.completed {
174174 s.current = s.total
175175 s.completed = true
176 go b.refreshTillShutdown()
176 go b.forceRefreshIfLastUncompleted()
177177 }
178178 }:
179179 case <-b.done:
191191 if s.triggerComplete && s.current >= s.total {
192192 s.current = s.total
193193 s.completed = true
194 go b.refreshTillShutdown()
194 go b.forceRefreshIfLastUncompleted()
195195 }
196196 }:
197197 case <-b.done:
218218 if s.triggerComplete && s.current >= s.total {
219219 s.current = s.total
220220 s.completed = true
221 go b.refreshTillShutdown()
221 go b.forceRefreshIfLastUncompleted()
222222 }
223223 }:
224224 case <-b.done:
370370 }
371371 }
372372
373 func (b *Bar) refreshTillShutdown() {
374 for {
375 select {
376 case b.container.refreshCh <- time.Now():
377 case <-b.done:
378 return
373 func (b *Bar) forceRefreshIfLastUncompleted() {
374 var uncompleted int
375 b.container.traverseBars(func(bar *Bar) bool {
376 if b != bar {
377 if !bar.Completed() {
378 uncompleted++
379 return false
380 }
381 }
382 return true
383 })
384 if uncompleted == 0 {
385 for {
386 select {
387 case b.container.refreshCh <- time.Now():
388 case <-b.done:
389 return
390 }
379391 }
380392 }
381393 }
165165 b.priority = priority
166166 heap.Fix(&s.bHeap, b.index)
167167 }:
168 case <-p.done:
169 }
170 }
171
172 func (p *Progress) traverseBars(cb func(b *Bar) bool) {
173 done := make(chan struct{})
174 select {
175 case p.operateState <- func(s *pState) {
176 for i := 0; i < s.bHeap.Len(); i++ {
177 bar := s.bHeap[i]
178 if !cb(bar) {
179 break
180 }
181 }
182 close(done)
183 }:
184 <-done
168185 case <-p.done:
169186 }
170187 }