add spinner to create

This commit is contained in:
Michael Yang 2023-07-17 14:14:41 -07:00
parent aba706ea2d
commit e4300e1eb7
2 changed files with 59 additions and 19 deletions

View file

@ -24,9 +24,17 @@ func create(cmd *cobra.Command, args []string) error {
filename, _ := cmd.Flags().GetString("file") filename, _ := cmd.Flags().GetString("file")
client := api.NewClient() client := api.NewClient()
var spinner *Spinner
request := api.CreateRequest{Name: args[0], Path: filename} request := api.CreateRequest{Name: args[0], Path: filename}
fn := func(resp api.CreateProgress) error { fn := func(resp api.CreateProgress) error {
fmt.Println(resp.Status) if spinner != nil {
spinner.Stop()
}
spinner = NewSpinner(resp.Status)
go spinner.Spin(100 * time.Millisecond)
return nil return nil
} }
@ -34,6 +42,10 @@ func create(cmd *cobra.Command, args []string) error {
return err return err
} }
if spinner != nil {
spinner.Stop()
}
return nil return nil
} }
@ -129,24 +141,8 @@ func generate(cmd *cobra.Command, model, prompt string) error {
if len(strings.TrimSpace(prompt)) > 0 { if len(strings.TrimSpace(prompt)) > 0 {
client := api.NewClient() client := api.NewClient()
spinner := progressbar.NewOptions(-1, spinner := NewSpinner("")
progressbar.OptionSetWriter(os.Stderr), go spinner.Spin(60 * time.Millisecond)
progressbar.OptionThrottle(60*time.Millisecond),
progressbar.OptionSpinnerType(14),
progressbar.OptionSetRenderBlankState(true),
progressbar.OptionSetElapsedTime(false),
progressbar.OptionClearOnFinish(),
)
go func() {
for range time.Tick(60 * time.Millisecond) {
if spinner.IsFinished() {
break
}
spinner.Add(1)
}
}()
var latest api.GenerateResponse var latest api.GenerateResponse

44
cmd/spinner.go Normal file
View file

@ -0,0 +1,44 @@
package cmd
import (
"fmt"
"os"
"time"
"github.com/schollz/progressbar/v3"
)
type Spinner struct {
description string
*progressbar.ProgressBar
}
func NewSpinner(description string) *Spinner {
return &Spinner{
description: description,
ProgressBar: progressbar.NewOptions(-1,
progressbar.OptionSetWriter(os.Stderr),
progressbar.OptionThrottle(60*time.Millisecond),
progressbar.OptionSpinnerType(14),
progressbar.OptionSetRenderBlankState(true),
progressbar.OptionSetElapsedTime(false),
progressbar.OptionClearOnFinish(),
progressbar.OptionSetDescription(description),
),
}
}
func (s *Spinner) Spin(tick time.Duration) {
for range time.Tick(tick) {
if s.IsFinished() {
break
}
s.Add(1)
}
}
func (s *Spinner) Stop() {
s.Finish()
fmt.Println(s.description)
}