check if bar is running with single call
Vladimir Bauer
4 years ago
| 406 | 406 | func (b *Bar) forceRefresh() { |
| 407 | 407 | var anyOtherRunning bool |
| 408 | 408 | b.container.traverseBars(func(bar *Bar) bool { |
| 409 | anyOtherRunning = b != bar && !bar.Completed() && !bar.Aborted() | |
| 409 | anyOtherRunning = b != bar && bar.isRunning() | |
| 410 | 410 | return !anyOtherRunning |
| 411 | 411 | }) |
| 412 | 412 | if !anyOtherRunning { |
| 418 | 418 | return |
| 419 | 419 | } |
| 420 | 420 | } |
| 421 | } | |
| 422 | } | |
| 423 | ||
| 424 | func (b *Bar) isRunning() bool { | |
| 425 | result := make(chan bool) | |
| 426 | select { | |
| 427 | case b.operateState <- func(s *bState) { | |
| 428 | result <- !s.completed && !s.aborted | |
| 429 | }: | |
| 430 | return <-result | |
| 431 | case <-b.done: | |
| 432 | return false | |
| 421 | 433 | } |
| 422 | 434 | } |
| 423 | 435 | |