Remove refreshId

This commit is contained in:
andig 2021-11-11 21:24:18 +01:00
parent b52a750237
commit 94205af4bc
2 changed files with 11 additions and 22 deletions

View file

@ -14,7 +14,6 @@ type Provider struct {
statusG func() (interface{}, error)
action func(action, cmd string) (ActionResponse, error)
expiry time.Duration
refreshId string
refreshTime time.Time
}
@ -41,12 +40,12 @@ func NewProvider(api *API, vin, pin string, expiry, cache time.Duration) *Provid
return impl
}
func (v *Provider) deepRefresh() (string, error) {
func (v *Provider) deepRefresh() error {
res, err := v.action("ev", "DEEPREFRESH")
if err == nil && res.ResponseStatus != "pending" {
err = fmt.Errorf("invalid response status: %s", res.ResponseStatus)
}
return res.CorrelationId, err
return err
}
func (v *Provider) status(statusG func() (StatusResponse, error)) (StatusResponse, error) {
@ -57,9 +56,8 @@ func (v *Provider) status(statusG func() (StatusResponse, error)) (StatusRespons
// result expired?
if res.Timestamp.Add(v.expiry).Before(time.Now()) {
// start refresh
if v.refreshId == "" {
v.refreshId, err = v.deepRefresh()
if err != nil {
if v.refreshTime.IsZero() {
if err = v.deepRefresh(); err != nil {
return res, err
}
@ -69,7 +67,7 @@ func (v *Provider) status(statusG func() (StatusResponse, error)) (StatusRespons
// wait for refresh
if time.Since(v.refreshTime) > refreshTimeout {
v.refreshId = ""
v.refreshTime = time.Time{}
return res, api.ErrTimeout
}
@ -77,7 +75,7 @@ func (v *Provider) status(statusG func() (StatusResponse, error)) (StatusRespons
}
// refresh done
v.refreshId = ""
v.refreshTime = time.Time{}
}
return res, err

View file

@ -1,7 +1,6 @@
package nissan
import (
"errors"
"fmt"
"time"
@ -14,7 +13,6 @@ type Provider struct {
statusG func() (interface{}, error)
action func(value Action) error
expiry time.Duration
refreshID string
refreshTime time.Time
}
@ -47,23 +45,16 @@ func (v *Provider) status(battery func() (Response, error), refresh func() (Resp
// return the current value
if time.Since(ts) <= v.expiry {
v.refreshID = ""
v.refreshTime = time.Time{}
return res, err
}
}
// request a refresh, irrespective of a previous error
if v.refreshID == "" {
var refreshRes Response
if refreshRes, err = refresh(); err == nil {
err = api.ErrMustRetry
v.refreshID = refreshRes.Data.ID
if v.refreshTime.IsZero() {
if _, err = refresh(); err == nil {
v.refreshTime = time.Now()
if v.refreshID == "" {
err = errors.New("refresh failed")
}
err = api.ErrMustRetry
}
return res, err
@ -71,7 +62,7 @@ func (v *Provider) status(battery func() (Response, error), refresh func() (Resp
// refresh finally expired
if time.Since(v.refreshTime) > refreshTimeout {
v.refreshID = ""
v.refreshTime = time.Time{}
if err == nil {
err = api.ErrTimeout
}