force refresh last uncompleted bar
Vladimir Bauer
4 years ago
| 173 | 173 |
if s.triggerComplete && !s.completed {
|
| 174 | 174 |
s.current = s.total
|
| 175 | 175 |
s.completed = true
|
| 176 | |
go b.refreshTillShutdown()
|
|
176 |
go b.forceRefreshIfLastUncompleted()
|
| 177 | 177 |
}
|
| 178 | 178 |
}:
|
| 179 | 179 |
case <-b.done:
|
|
| 191 | 191 |
if s.triggerComplete && s.current >= s.total {
|
| 192 | 192 |
s.current = s.total
|
| 193 | 193 |
s.completed = true
|
| 194 | |
go b.refreshTillShutdown()
|
|
194 |
go b.forceRefreshIfLastUncompleted()
|
| 195 | 195 |
}
|
| 196 | 196 |
}:
|
| 197 | 197 |
case <-b.done:
|
|
| 218 | 218 |
if s.triggerComplete && s.current >= s.total {
|
| 219 | 219 |
s.current = s.total
|
| 220 | 220 |
s.completed = true
|
| 221 | |
go b.refreshTillShutdown()
|
|
221 |
go b.forceRefreshIfLastUncompleted()
|
| 222 | 222 |
}
|
| 223 | 223 |
}:
|
| 224 | 224 |
case <-b.done:
|
|
| 370 | 370 |
}
|
| 371 | 371 |
}
|
| 372 | 372 |
|
| 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 |
}
|
| 379 | 391 |
}
|
| 380 | 392 |
}
|
| 381 | 393 |
}
|
| 165 | 165 |
b.priority = priority
|
| 166 | 166 |
heap.Fix(&s.bHeap, b.index)
|
| 167 | 167 |
}:
|
|
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
|
| 168 | 185 |
case <-p.done:
|
| 169 | 186 |
}
|
| 170 | 187 |
}
|