spinner.go 816 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package cmd
  2. import (
  3. "fmt"
  4. "os"
  5. "time"
  6. "github.com/jmorganca/ollama/progressbar"
  7. )
  8. type Spinner struct {
  9. description string
  10. *progressbar.ProgressBar
  11. }
  12. func NewSpinner(description string) *Spinner {
  13. return &Spinner{
  14. description: description,
  15. ProgressBar: progressbar.NewOptions(-1,
  16. progressbar.OptionSetWriter(os.Stderr),
  17. progressbar.OptionThrottle(60*time.Millisecond),
  18. progressbar.OptionSpinnerType(14),
  19. progressbar.OptionSetRenderBlankState(true),
  20. progressbar.OptionSetElapsedTime(false),
  21. progressbar.OptionClearOnFinish(),
  22. progressbar.OptionSetDescription(description),
  23. ),
  24. }
  25. }
  26. func (s *Spinner) Spin(tick time.Duration) {
  27. for range time.Tick(tick) {
  28. if s.IsFinished() {
  29. break
  30. }
  31. s.Add(1)
  32. }
  33. }
  34. func (s *Spinner) Stop() {
  35. s.Finish()
  36. fmt.Println(s.description)
  37. }