refactor: http retry for retryable errors (#20)
This commit is contained in:
@@ -19,8 +19,7 @@ var (
|
||||
|
||||
func (c *Client) getSystemStatus() (*systemStatus, error) {
|
||||
// send request
|
||||
resp, err := rek.Get(util.JoinURL(c.apiURL, "system", "status"), rek.Headers(c.apiHeaders),
|
||||
rek.Timeout(c.apiTimeout))
|
||||
resp, err := rek.Get(util.JoinURL(c.apiURL, "system", "status"), rek.Client(c.http), rek.Headers(c.apiHeaders))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("request system status: %w", err)
|
||||
}
|
||||
@@ -42,8 +41,7 @@ func (c *Client) getSystemStatus() (*systemStatus, error) {
|
||||
|
||||
func (c *Client) getQualityProfileId(profileName string) (int, error) {
|
||||
// send request
|
||||
resp, err := rek.Get(util.JoinURL(c.apiURL, "profile"), rek.Headers(c.apiHeaders),
|
||||
rek.Timeout(c.apiTimeout))
|
||||
resp, err := rek.Get(util.JoinURL(c.apiURL, "profile"), rek.Client(c.http), rek.Headers(c.apiHeaders))
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("request quality profiles: %w", err)
|
||||
}
|
||||
@@ -79,7 +77,7 @@ func (c *Client) lookupMediaItem(item *media.Item) (*lookupRequest, error) {
|
||||
}
|
||||
|
||||
// send request
|
||||
resp, err := rek.Get(reqUrl, rek.Headers(c.apiHeaders), rek.Timeout(c.apiTimeout))
|
||||
resp, err := rek.Get(reqUrl, rek.Client(c.http), rek.Headers(c.apiHeaders))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("request series lookup: %w", err)
|
||||
}
|
||||
@@ -134,14 +132,14 @@ func (c *Client) AddMediaItem(item *media.Item, opts ...nabarr.PvrOption) error
|
||||
IgnoreEpisodesWithoutFiles: false,
|
||||
},
|
||||
Seasons: []string{},
|
||||
SeriesType: util.StringOrDefault(o.LookupType, "standard"),
|
||||
SeriesType: util.StringOrDefault(o.SeriesType, "standard"),
|
||||
SeasonFolder: true,
|
||||
TvdbId: tvdbId,
|
||||
}
|
||||
|
||||
// send request
|
||||
resp, err := rek.Post(util.JoinURL(c.apiURL, "series"), rek.Headers(c.apiHeaders), rek.Json(req),
|
||||
rek.Timeout(c.apiTimeout))
|
||||
resp, err := rek.Post(util.JoinURL(c.apiURL, "series"), rek.Client(c.http), rek.Headers(c.apiHeaders),
|
||||
rek.Json(req))
|
||||
if err != nil {
|
||||
return fmt.Errorf("request add series: %w", err)
|
||||
}
|
||||
|
||||
@@ -163,11 +163,11 @@ func (c *Client) queueProcessor(tail state.ShutdownTail) {
|
||||
// set appropriate series type
|
||||
switch {
|
||||
case util.StringSliceContains(mediaItem.Genres, "anime"), util.StringSliceContains(mediaItem.Tvdb.Genre, "anime"):
|
||||
s.Type = "anime"
|
||||
s.SeriesType = "anime"
|
||||
}
|
||||
|
||||
// check if item should be skipped (skip options)
|
||||
if c.skipAnime && strings.EqualFold(s.Type, "anime") {
|
||||
if c.skipAnime && strings.EqualFold(s.SeriesType, "anime") {
|
||||
c.log.Debug().
|
||||
Str("trakt_title", mediaItem.Title).
|
||||
Str("trakt_tvdb_id", mediaItem.TvdbId).
|
||||
@@ -202,7 +202,7 @@ func (c *Client) queueProcessor(tail state.ShutdownTail) {
|
||||
}
|
||||
|
||||
opts := []nabarr.PvrOption{
|
||||
nabarr.WithSeriesType(s.Type),
|
||||
nabarr.WithSeriesType(s.SeriesType),
|
||||
nabarr.WithAddMonitored(c.addMonitored),
|
||||
nabarr.WithSearchMissing(c.searchMissing),
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/l3uddz/nabarr/media"
|
||||
"github.com/l3uddz/nabarr/util"
|
||||
"github.com/rs/zerolog"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
@@ -27,7 +28,6 @@ type Client struct {
|
||||
|
||||
apiURL string
|
||||
apiHeaders map[string]string
|
||||
apiTimeout time.Duration
|
||||
|
||||
cache *cache.Client
|
||||
cacheTempDuration time.Duration
|
||||
@@ -36,6 +36,7 @@ type Client struct {
|
||||
queue chan *media.FeedItem
|
||||
|
||||
m *media.Client
|
||||
http *http.Client
|
||||
log zerolog.Logger
|
||||
ignoresExpr []*nabarr.ExprProgram
|
||||
}
|
||||
@@ -84,10 +85,10 @@ func New(c nabarr.PvrConfig, mode string, m *media.Client, cc *cache.Client) (*C
|
||||
|
||||
apiURL: apiURL,
|
||||
apiHeaders: apiHeaders,
|
||||
apiTimeout: 60 * time.Second,
|
||||
|
||||
m: m,
|
||||
log: l,
|
||||
m: m,
|
||||
http: util.NewRetryableHttpClient(60*time.Second, nil, &l),
|
||||
log: l,
|
||||
}
|
||||
|
||||
// compile expressions
|
||||
|
||||
@@ -10,12 +10,12 @@ type qualityProfile struct {
|
||||
}
|
||||
|
||||
type lookupRequest struct {
|
||||
Id int `json:"id,omitempty"`
|
||||
Title string `json:"title"`
|
||||
TitleSlug string `json:"titleSlug"`
|
||||
Year int `json:"year,omitempty"`
|
||||
TvdbId int `json:"tvdbId"`
|
||||
Type string `json:"seriesType"`
|
||||
Id int `json:"id,omitempty"`
|
||||
Title string `json:"title"`
|
||||
TitleSlug string `json:"titleSlug"`
|
||||
Year int `json:"year,omitempty"`
|
||||
TvdbId int `json:"tvdbId"`
|
||||
SeriesType string `json:"seriesType"`
|
||||
}
|
||||
|
||||
type addRequest struct {
|
||||
|
||||
Reference in New Issue
Block a user