add spinner to create
This commit is contained in:
parent
aba706ea2d
commit
e4300e1eb7
2 changed files with 59 additions and 19 deletions
34
cmd/cmd.go
34
cmd/cmd.go
|
@ -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
44
cmd/spinner.go
Normal 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)
|
||||||
|
}
|
Loading…
Reference in a new issue