Codebase list golang-github-vbauerster-mpb / ac9eb07
refactoring manualRefresh to refreshCh Vladimir Bauer 3 years ago
3 changed file(s) with 50 addition(s) and 44 deletion(s). Raw diff Collapse all Expand all
5050 buffers [3]*bytes.Buffer
5151 filler BarFiller
5252 extender extenderFunc
53 manualRefresh chan interface{}
53 refreshCh chan time.Time
5454
5555 wait struct {
5656 bar *Bar // key for (*pState).queueBars
185185 if s.current >= s.total {
186186 s.current = s.total
187187 s.completed = true
188 b.forceRefresh(s.manualRefresh)
188 b.forceRefresh(s.refreshCh)
189189 } else {
190190 s.triggerComplete = true
191191 }
213213 if triggerCompleteNow {
214214 s.current = s.total
215215 s.completed = true
216 b.forceRefresh(s.manualRefresh)
216 b.forceRefresh(s.refreshCh)
217217 }
218218 }:
219219 case <-b.done:
231231 if s.triggerComplete && s.current >= s.total {
232232 s.current = s.total
233233 s.completed = true
234 b.forceRefresh(s.manualRefresh)
234 b.forceRefresh(s.refreshCh)
235235 }
236236 }:
237237 case <-b.done:
253253 if s.triggerComplete && s.current >= s.total {
254254 s.current = s.total
255255 s.completed = true
256 b.forceRefresh(s.manualRefresh)
256 b.forceRefresh(s.refreshCh)
257257 }
258258 }:
259259 case <-b.done:
281281 if s.triggerComplete && s.current >= s.total {
282282 s.current = s.total
283283 s.completed = true
284 b.forceRefresh(s.manualRefresh)
284 b.forceRefresh(s.refreshCh)
285285 }
286286 }:
287287 case <-b.done:
311311 if s.triggerComplete && s.current >= s.total {
312312 s.current = s.total
313313 s.completed = true
314 b.forceRefresh(s.manualRefresh)
314 b.forceRefresh(s.refreshCh)
315315 }
316316 }:
317317 case <-b.done:
349349 }
350350 s.aborted = true
351351 s.dropOnComplete = drop
352 b.forceRefresh(s.manualRefresh)
352 b.forceRefresh(s.refreshCh)
353353 }:
354354 case <-b.done:
355355 }
448448 }
449449 }
450450
451 func (b *Bar) forceRefresh(refreshCh chan<- interface{}) {
451 func (b *Bar) forceRefresh(refreshCh chan<- time.Time) {
452452 b.container.bwg.Add(1)
453453 go b.forceRefreshImpl(refreshCh)
454454 }
455455
456 func (b *Bar) forceRefreshImpl(refreshCh chan<- interface{}) {
456 func (b *Bar) forceRefreshImpl(refreshCh chan<- time.Time) {
457457 defer b.container.bwg.Done()
458458 var anyOtherRunning bool
459459 b.container.traverseBars(func(bar *Bar) bool {
3838
3939 // WithManualRefresh disables internal auto refresh time.Ticker.
4040 // Refresh will occur upon receive value from provided ch.
41 func WithManualRefresh(ch chan interface{}) ContainerOption {
41 func WithManualRefresh(ch <-chan interface{}) ContainerOption {
4242 return func(s *pState) {
43 s.manualRefresh = ch
44 s.disableAutoRefresh = true
43 s.manualRefresh = true
44 go func(refreshCh chan<- time.Time, done <-chan struct{}) {
45 for {
46 select {
47 case x := <-ch:
48 if t, ok := x.(time.Time); ok {
49 refreshCh <- t
50 } else {
51 refreshCh <- time.Now()
52 }
53 case <-done:
54 return
55 }
56 }
57 }(s.refreshCh, s.ctx.Done())
4558 }
4659 }
4760
3535 ctx context.Context
3636 hm heapManager
3737 dropS, dropD chan struct{}
38 refreshCh chan time.Time
3839 rows []io.Reader
3940
4041 // following are provided/overrided by user
41 refreshRate time.Duration
42 idCount int
43 reqWidth int
44 popPriority int
45 popCompleted bool
46 disableAutoRefresh bool
47 forceAutoRefresh bool
48 manualRefresh chan interface{}
49 renderDelay <-chan struct{}
50 shutdownNotifier chan<- interface{}
51 queueBars map[*Bar]*Bar
52 output io.Writer
53 debugOut io.Writer
54 uwg *sync.WaitGroup
42 refreshRate time.Duration
43 idCount int
44 reqWidth int
45 popPriority int
46 popCompleted bool
47 manualRefresh bool
48 forceAutoRefresh bool
49 renderDelay <-chan struct{}
50 shutdownNotifier chan<- interface{}
51 queueBars map[*Bar]*Bar
52 output io.Writer
53 debugOut io.Writer
54 uwg *sync.WaitGroup
5555 }
5656
5757 // New creates new Progress container instance. It's not possible to
7070 hm: make(heapManager),
7171 dropS: make(chan struct{}),
7272 dropD: make(chan struct{}),
73 refreshCh: make(chan time.Time),
7374 rows: make([]io.Reader, 32),
7475 refreshRate: defaultRefreshRate,
7576 popPriority: math.MinInt32,
8283 if opt != nil {
8384 opt(s)
8485 }
85 }
86
87 if s.manualRefresh == nil {
88 s.manualRefresh = make(chan interface{})
8986 }
9087
9188 p := &Progress{
273270 ch := make(chan time.Time, 1)
274271 go func() {
275272 var autoRefresh <-chan time.Time
276 if (isTerminal || s.forceAutoRefresh) && !s.disableAutoRefresh {
273 if (isTerminal || s.forceAutoRefresh) && !s.manualRefresh {
277274 if s.renderDelay != nil {
278275 <-s.renderDelay
279276 }
285282 select {
286283 case t := <-autoRefresh:
287284 ch <- t
288 case x := <-s.manualRefresh:
289 if t, ok := x.(time.Time); ok {
290 ch <- t
291 } else {
292 ch <- time.Now()
293 }
285 case t := <-s.refreshCh:
286 ch <- t
294287 case <-s.ctx.Done():
295288 close(done)
296289 return
400393
401394 func (s *pState) makeBarState(total int64, filler BarFiller, options ...BarOption) *bState {
402395 bs := &bState{
403 id: s.idCount,
404 priority: s.idCount,
405 reqWidth: s.reqWidth,
406 total: total,
407 filler: filler,
408 manualRefresh: s.manualRefresh,
396 id: s.idCount,
397 priority: s.idCount,
398 reqWidth: s.reqWidth,
399 total: total,
400 filler: filler,
401 refreshCh: s.refreshCh,
409402 }
410403
411404 if total > 0 {