From c8050f256b77bb345e2758db6ac20cd43e5812ac Mon Sep 17 00:00:00 2001 From: Andreas Pfohl Date: Fri, 7 Jul 2023 21:55:41 +0200 Subject: [PATCH 1/2] Added a loading spinner for requests --- components/printer/loading.go | 27 +++++++++++++++++++++++++++ components/requests/requests.go | 13 ++++++++++--- go.mod | 10 +++++++++- go.sum | 21 +++++++++++++-------- 4 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 components/printer/loading.go diff --git a/components/printer/loading.go b/components/printer/loading.go new file mode 100644 index 0000000..bb2a8f8 --- /dev/null +++ b/components/printer/loading.go @@ -0,0 +1,27 @@ +package printer + +import ( + "time" + + "github.com/briandowns/spinner" +) + +type Func[T any] func() (T, error) + +var loadingSpinner *spinner.Spinner + +func init() { + loadingSpinner = spinner.New(spinner.CharSets[14], 100*time.Millisecond) + loadingSpinner.Suffix = " fetching data" + _ = loadingSpinner.Color("yellow") +} + +func WithSpinner[T any](f Func[T]) (T, error) { + loadingSpinner.Start() + + t, err := f() + + loadingSpinner.Stop() + + return t, err +} diff --git a/components/requests/requests.go b/components/requests/requests.go index 0be2fbc..db0db4f 100644 --- a/components/requests/requests.go +++ b/components/requests/requests.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/opf/openproject-cli/components/errors" + "github.com/opf/openproject-cli/components/printer" ) var client *http.Client @@ -25,15 +26,21 @@ func Init(hostUrl *url.URL, tokenValue string) { } func Get(path string, query *Query) (responseBody []byte, err error) { - return Do("GET", path, query, nil) + loadingFunc := func() ([]byte, error) { return Do("GET", path, query, nil) } + + return printer.WithSpinner(loadingFunc) } func Post(path string, requestData *RequestData) (responseBody []byte, err error) { - return Do("POST", path, nil, requestData) + loadingFunc := func() ([]byte, error) { return Do("POST", path, nil, requestData) } + + return printer.WithSpinner(loadingFunc) } func Patch(path string, requestBody *RequestData) (responseBody []byte, err error) { - return Do("PATCH", path, nil, requestBody) + loadingFunc := func() ([]byte, error) { return Do("PATCH", path, nil, requestBody) } + + return printer.WithSpinner(loadingFunc) } func Do(method string, path string, query *Query, requestData *RequestData) (responseBody []byte, err error) { diff --git a/go.mod b/go.mod index cd3412e..a93ffb0 100644 --- a/go.mod +++ b/go.mod @@ -2,9 +2,17 @@ module github.com/opf/openproject-cli go 1.22 -require github.com/spf13/cobra v1.8.0 +require ( + github.com/briandowns/spinner v1.23.0 + github.com/spf13/cobra v1.8.0 +) require ( + github.com/fatih/color v1.7.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/mattn/go-colorable v0.1.2 // indirect + github.com/mattn/go-isatty v0.0.8 // indirect github.com/spf13/pflag v1.0.5 // indirect + golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 // indirect + golang.org/x/term v0.1.0 // indirect ) diff --git a/go.sum b/go.sum index 26d6ffd..6ffe3b0 100644 --- a/go.sum +++ b/go.sum @@ -1,18 +1,23 @@ -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= +github.com/briandowns/spinner v1.23.0 h1:alDF2guRWqa/FOZZYWjlMIx2L6H0wyewPxo/CH4Pt2A= +github.com/briandowns/spinner v1.23.0/go.mod h1:rPG4gmXeN3wQV/TsAY4w8lPdIM6RX3yqeBQJSrbXjuE= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From 3a988bc0d99b9d1c9df6e22bfc39eb69c72ae9af Mon Sep 17 00:00:00 2001 From: Andreas Pfohl Date: Thu, 23 May 2024 14:46:15 +0200 Subject: [PATCH 2/2] Fixed suggestions from PR --- components/printer/loading.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/printer/loading.go b/components/printer/loading.go index bb2a8f8..ab7d9ca 100644 --- a/components/printer/loading.go +++ b/components/printer/loading.go @@ -6,7 +6,7 @@ import ( "github.com/briandowns/spinner" ) -type Func[T any] func() (T, error) +type function[T any] func() (T, error) var loadingSpinner *spinner.Spinner @@ -16,7 +16,7 @@ func init() { _ = loadingSpinner.Color("yellow") } -func WithSpinner[T any](f Func[T]) (T, error) { +func WithSpinner[T any](f function[T]) (T, error) { loadingSpinner.Start() t, err := f()