Skip to content

use case limitation #19

@malikbenkirane

Description

@malikbenkirane

Hi,

I've been playing with the package and I would like to be able to dynamically add/reset/remove progress bars. That is I don't know how many progress bars there will be on the screen before starting the program. In other words the number of bars may vary. I suspected that the package will not provide the feature because I see you call go mybars.Listen() after "making" all the bars with mybars.MakeBar calls.

I've written a short example (about the size of the example showcased in the README) to show the limitation as when 1 second has passed all the bars freeze :

package main

import (
	"fmt"
	"sync"
	"time"

	"github.com/sethgrid/multibar"
)

func main() {
	multibars, err := multibar.New()
	if err != nil {
		panic(err)
	}
	bars := []multibar.ProgressFunc{}
	stopChannels := [](chan int){}
	for i := 0; i < 5; i++ {
		bars = append(bars, multibars.MakeBar(10, fmt.Sprintf("%d", i)))
		stopChannels = append(stopChannels, make(chan int))
	}
	go multibars.Listen()
	for i := 0; i < 5; i++ {
		go func(i int) {
			t := time.NewTicker(200 * time.Millisecond)
			step := 0
			defer t.Stop()
			for {
				select {
				case <-t.C:
					step++
					if step == 10 {
						return
					}
					bars[i](step)
				case <-stopChannels[i]:
					return
				}
			}
		}(i)
	}
	t := time.NewTicker(1 * time.Second)
	<-t.C
	t.Stop()
	stopChannels[2] <- 1
	surprise := multibars.MakeBar(10, "surprise")
	go multibars.Listen()
	wg := &sync.WaitGroup{}
	wg.Add(1)
	go func() {
		t := time.NewTicker(200 * time.Millisecond)
		defer func() {
			t.Stop()
			wg.Done()
		}()
		for i := 0; i < 10; i++ {
			<-t.C
			surprise(i)
		}
	}()
	wg.Wait()
}

Has anyone already succeeded to do something like this ? Thank you in advance!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions