Codebase list golang-github-vbauerster-mpb / c1b6cc1
minor: methods place swap Vladimir Bauer 3 years ago
1 changed file(s) with 40 addition(s) and 40 deletion(s). Raw diff Collapse all Expand all
215215 <-p.shutdown
216216 }
217217
218 func (p *Progress) serve(s *pState, cw *cwriter.Writer) {
219 var err error
220 render := func() error { return s.render(cw) }
221 tickerC := s.newTicker(p.ctx, cw.IsTerminal(), p.done)
222
223 go s.hm.run()
224
225 for {
226 select {
227 case op := <-p.operateState:
228 op(s)
229 case fn := <-p.interceptIO:
230 fn(cw)
231 case <-tickerC:
232 e := render()
233 if e != nil {
234 p.cancel() // cancel all bars
235 render = func() error { return nil }
236 err = e
237 }
238 case <-p.done:
239 update := make(chan bool)
240 for err == nil {
241 s.hm.state(update)
242 if <-update {
243 err = render()
244 } else {
245 break
246 }
247 }
248 if err != nil {
249 _, _ = fmt.Fprintln(s.debugOut, err.Error())
250 }
251 s.hm.end(s.shutdownNotifier)
252 close(p.shutdown)
253 return
254 }
255 }
256 }
257
218258 func (s *pState) newTicker(ctx context.Context, isTerminal bool, done chan struct{}) chan time.Time {
219259 ch := make(chan time.Time, 1)
220260 go func() {
246286 return ch
247287 }
248288
249 func (p *Progress) serve(s *pState, cw *cwriter.Writer) {
250 var err error
251 render := func() error { return s.render(cw) }
252 tickerC := s.newTicker(p.ctx, cw.IsTerminal(), p.done)
253
254 go s.hm.run()
255
256 for {
257 select {
258 case op := <-p.operateState:
259 op(s)
260 case fn := <-p.interceptIO:
261 fn(cw)
262 case <-tickerC:
263 e := render()
264 if e != nil {
265 p.cancel() // cancel all bars
266 render = func() error { return nil }
267 err = e
268 }
269 case <-p.done:
270 update := make(chan bool)
271 for err == nil {
272 s.hm.state(update)
273 if <-update {
274 err = render()
275 } else {
276 break
277 }
278 }
279 if err != nil {
280 _, _ = fmt.Fprintln(s.debugOut, err.Error())
281 }
282 s.hm.end(s.shutdownNotifier)
283 close(p.shutdown)
284 return
285 }
286 }
287 }
288
289289 func (s *pState) render(cw *cwriter.Writer) (err error) {
290290 var width, height int
291291 if cw.IsTerminal() {