github.com/khulnasoft-lab/tunnel-db@v0.0.0-20231117205118-74e1113bd007/pkg/utils/progress.go (about)

     1  package utils
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/briandowns/spinner"
     7  	pb "gopkg.in/cheggaaa/pb.v1"
     8  )
     9  
    10  var (
    11  	Quiet = false
    12  )
    13  
    14  type Spinner struct {
    15  	client *spinner.Spinner
    16  }
    17  
    18  func NewSpinner(suffix string) *Spinner {
    19  	if Quiet {
    20  		return &Spinner{}
    21  	}
    22  	s := spinner.New(spinner.CharSets[36], 100*time.Millisecond)
    23  	s.Suffix = suffix
    24  	return &Spinner{client: s}
    25  }
    26  
    27  func (s *Spinner) Start() {
    28  	if s.client == nil {
    29  		return
    30  	}
    31  	s.client.Start()
    32  }
    33  func (s *Spinner) Stop() {
    34  	if s.client == nil {
    35  		return
    36  	}
    37  	s.client.Stop()
    38  }
    39  
    40  // TODO: Expose an interface for progressbar
    41  type ProgressBar struct {
    42  	client *pb.ProgressBar
    43  }
    44  
    45  func PbStartNew(total int) *ProgressBar {
    46  	if Quiet {
    47  		return &ProgressBar{}
    48  	}
    49  	bar := pb.StartNew(total)
    50  	return &ProgressBar{client: bar}
    51  }
    52  
    53  func (p *ProgressBar) Increment() {
    54  	if p.client == nil {
    55  		return
    56  	}
    57  	p.client.Increment()
    58  }
    59  func (p *ProgressBar) Finish() {
    60  	if p.client == nil {
    61  		return
    62  	}
    63  	p.client.Finish()
    64  }