pvr: add options and support for anime (#17)

* pvr: begin adding options

* pvr: add ability to configure add behaviour via config

* pvr: add skip_anime

* pvr: do not continue processing item if lookup failed or add to pvr failed
This commit is contained in:
l3uddz
2021-02-20 20:01:04 +00:00
committed by GitHub
parent 523e561666
commit a2848439b9
14 changed files with 283 additions and 30 deletions

View File

@@ -4,6 +4,7 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/l3uddz/nabarr"
"github.com/l3uddz/nabarr/media"
"github.com/l3uddz/nabarr/util"
"github.com/lucperkins/rek"
@@ -122,7 +123,13 @@ func (c *Client) lookupMediaItem(item *media.Item) (*lookupRequest, error) {
return nil, fmt.Errorf("movie lookup %sId: %v: %w", mdType, mdId, ErrItemNotFound)
}
func (c *Client) AddMediaItem(item *media.Item) error {
func (c *Client) AddMediaItem(item *media.Item, opts ...nabarr.PvrOption) error {
// prepare options
o, err := nabarr.BuildPvrOptions(opts...)
if err != nil {
return fmt.Errorf("build options: %v: %w", item.TmdbId, err)
}
// prepare request
req := addRequest{
Title: item.Title,
@@ -130,11 +137,11 @@ func (c *Client) AddMediaItem(item *media.Item) error {
Year: item.Year,
QualityProfileId: c.qualityProfileId,
Images: []string{},
Monitored: true,
Monitored: o.AddMonitored,
RootFolderPath: c.rootFolder,
MinimumAvailability: "released",
AddOptions: addOptions{
SearchForMovie: true,
SearchForMovie: o.SearchMissing,
IgnoreEpisodesWithFiles: false,
IgnoreEpisodesWithoutFiles: false,
},

View File

@@ -3,6 +3,7 @@ package radarr
import (
"errors"
"fmt"
"github.com/l3uddz/nabarr"
"github.com/l3uddz/nabarr/media"
"github.com/lefelys/state"
)
@@ -144,6 +145,7 @@ func (c *Client) queueProcessor(tail state.ShutdownTail) {
Str("feed_imdb_id", feedItem.ImdbId).
Str("feed_name", feedItem.Feed).
Msg("Failed finding item via pvr lookup")
continue
}
if s.Id > 0 {
@@ -184,7 +186,6 @@ func (c *Client) queueProcessor(tail state.ShutdownTail) {
if c.testMode {
c.log.Info().
Err(err).
Str("trakt_title", mediaItem.Title).
Str("trakt_imdb_id", mediaItem.ImdbId).
Str("trakt_tmdb_id", mediaItem.TmdbId).
@@ -194,7 +195,12 @@ func (c *Client) queueProcessor(tail state.ShutdownTail) {
continue
}
if err := c.AddMediaItem(mediaItem); err != nil {
opts := []nabarr.PvrOption{
nabarr.WithAddMonitored(c.addMonitored),
nabarr.WithSearchMissing(c.searchMissing),
}
if err := c.AddMediaItem(mediaItem, opts...); err != nil {
c.log.Error().
Err(err).
Str("feed_title", mediaItem.FeedTitle).
@@ -204,6 +210,7 @@ func (c *Client) queueProcessor(tail state.ShutdownTail) {
Int("trakt_year", mediaItem.Year).
Str("feed_name", feedItem.Feed).
Msg("Failed adding item to pvr")
continue
}
// add item to perm cache (item was added to pvr)
@@ -216,7 +223,6 @@ func (c *Client) queueProcessor(tail state.ShutdownTail) {
}
c.log.Info().
Err(err).
Str("trakt_title", mediaItem.Title).
Str("trakt_imdb_id", mediaItem.ImdbId).
Str("trakt_tmdb_id", mediaItem.TmdbId).

View File

@@ -20,6 +20,10 @@ type Client struct {
rootFolder string
qualityProfileId int
// options
searchMissing bool
addMonitored bool
apiURL string
apiHeaders map[string]string
apiTimeout time.Duration
@@ -65,7 +69,9 @@ func New(c nabarr.PvrConfig, mode string, m *media.Client, cc *cache.Client) (*C
name: strings.ToLower(c.Name),
testMode: strings.EqualFold(mode, "test"),
rootFolder: c.RootFolder,
rootFolder: c.RootFolder,
searchMissing: util.BoolOrDefault(c.Options.SearchMissing, true),
addMonitored: util.BoolOrDefault(c.Options.AddMonitored, true),
cache: cc,
cacheTempDuration: c.CacheDuration,