From 5091d78acfbfcc9e85cd4150dfb0b8331c742d49 Mon Sep 17 00:00:00 2001 From: l3uddz Date: Fri, 5 Mar 2021 22:35:16 +0000 Subject: [PATCH] misc: rss and media changes (#27) * refactor: tweak rss processing * media: override trakt network with tvdb network if trakts is empty * media: dont merge tvdb language with trakt language * media: resolve issue with imdb ids --- media/show.go | 7 +++++-- media/struct.go | 8 +++++--- media/tvdb/media.go | 1 + media/tvdb/struct.go | 1 + rss/job.go | 2 +- rss/process.go | 7 ++++--- util/slice.go | 11 +++++++++++ util/slice_test.go | 36 ++++++++++++++++++++++++++++++++++++ 8 files changed, 64 insertions(+), 9 deletions(-) diff --git a/media/show.go b/media/show.go index 41f036c..4ea31cb 100644 --- a/media/show.go +++ b/media/show.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" "github.com/l3uddz/nabarr/media/trakt" - "github.com/l3uddz/nabarr/util" "strconv" ) @@ -64,7 +63,11 @@ func (c *Client) GetShowInfo(item *FeedItem) (*Item, error) { Msg("Item was not found on tvdb") } else if ti != nil { mi.Tvdb = *ti - mi.Languages = util.StringSliceMergeUnique(mi.Languages, []string{ti.Language}) + + // merge with trakt data + if mi.Network == "" { + mi.Network = ti.Network + } } return mi, nil diff --git a/media/struct.go b/media/struct.go index a32441c..e02c352 100644 --- a/media/struct.go +++ b/media/struct.go @@ -4,7 +4,9 @@ import ( "encoding/xml" "github.com/l3uddz/nabarr/media/omdb" "github.com/l3uddz/nabarr/media/tvdb" + "github.com/l3uddz/nabarr/util" "github.com/pkg/errors" + "strings" "time" ) @@ -80,11 +82,11 @@ type FeedItem struct { func (f *FeedItem) GetProviderData() (string, string) { switch { - case f.TvdbId != "" && f.TvdbId != "0": + case f.TvdbId != "" && !util.StringSliceContains([]string{"0", "1"}, f.TvdbId): return "tvdb", f.TvdbId - case f.TmdbId != "" && f.TmdbId != "0": + case f.TmdbId != "" && !util.StringSliceContains([]string{"0", "1"}, f.TmdbId): return "tmdb", f.TmdbId - case f.ImdbId != "": + case f.ImdbId != "" && strings.HasPrefix(f.ImdbId, "tt"): return "imdb", f.ImdbId } return "", "" diff --git a/media/tvdb/media.go b/media/tvdb/media.go index 32be524..94eefb9 100644 --- a/media/tvdb/media.go +++ b/media/tvdb/media.go @@ -46,6 +46,7 @@ func (c *Client) GetItem(tvdbId string) (*Item, error) { return &Item{ Runtime: util.Atoi(b.Data.Runtime, 0), Language: b.Data.Language, + Network: b.Data.Network, Genre: b.Data.Genre, AirsDayOfWeek: b.Data.AirsDayOfWeek, SiteRating: b.Data.SiteRating, diff --git a/media/tvdb/struct.go b/media/tvdb/struct.go index 7add71d..f8e8e01 100644 --- a/media/tvdb/struct.go +++ b/media/tvdb/struct.go @@ -35,6 +35,7 @@ type lookupResponse struct { type Item struct { Runtime int `json:"Runtime,omitempty"` Language string `json:"Language,omitempty"` + Network string `json:"Network,omitempty"` Genre []string `json:"Genre,omitempty"` AirsDayOfWeek string `json:"AirsDayOfWeek,omitempty"` SiteRating float64 `json:"SiteRating,omitempty"` diff --git a/rss/job.go b/rss/job.go index 115b6ee..4c4596a 100644 --- a/rss/job.go +++ b/rss/job.go @@ -26,7 +26,7 @@ func (c *Client) AddJob(feed feedItem) error { job := &rssJob{ name: feed.Name, log: l, - http: util.NewRetryableHttpClient(30*time.Second, nil, &l), + http: util.NewRetryableHttpClient(60*time.Second, nil, &l), url: feed.URL, pvrs: make(map[string]pvr.PVR, 0), diff --git a/rss/process.go b/rss/process.go index 31453b9..d52f3e4 100644 --- a/rss/process.go +++ b/rss/process.go @@ -4,6 +4,7 @@ import ( "encoding/xml" "fmt" "github.com/l3uddz/nabarr/media" + "github.com/l3uddz/nabarr/util" "github.com/lucperkins/rek" "sort" "strings" @@ -113,13 +114,13 @@ func (j *rssJob) getFeed() ([]media.FeedItem, error) { // validate item switch { - case b.Channel.Items[p].TvdbId != "" && b.Channel.Items[p].TvdbId != "0": + case b.Channel.Items[p].TvdbId != "" && !util.StringSliceContains([]string{"0", "1"}, b.Channel.Items[p].TvdbId): // tvdb id is present, allow processing break - case b.Channel.Items[p].ImdbId != "": + case b.Channel.Items[p].ImdbId != "" && strings.HasPrefix(b.Channel.Items[p].ImdbId, "tt"): // imdb id present, allow processing break - case b.Channel.Items[p].TmdbId != "" && b.Channel.Items[p].TmdbId != "0": + case b.Channel.Items[p].TmdbId != "" && !util.StringSliceContains([]string{"0", "1"}, b.Channel.Items[p].TmdbId): // tmdb id present, allow processing break default: diff --git a/util/slice.go b/util/slice.go index 66ca311..85af3f1 100644 --- a/util/slice.go +++ b/util/slice.go @@ -11,6 +11,17 @@ func StringSliceContains(slice []string, val string) bool { return false } +func StringSliceContainsAny(slice []string, vals []string) bool { + for _, s := range slice { + for _, v := range vals { + if strings.EqualFold(s, v) { + return true + } + } + } + return false +} + func StringSliceMergeUnique(existingSlice []string, mergeSlice []string) []string { // add existing data := make([]string, 0) diff --git a/util/slice_test.go b/util/slice_test.go index 7a1d87f..3b15c2d 100644 --- a/util/slice_test.go +++ b/util/slice_test.go @@ -92,3 +92,39 @@ func TestStringSliceMergeUnique(t *testing.T) { }) } } + +func TestStringSliceContainsAny(t *testing.T) { + type args struct { + slice []string + vals []string + } + tests := []struct { + name string + args args + want bool + }{ + { + name: "expect true", + args: args{ + slice: []string{"tes", "Test"}, + vals: []string{"nope", "test"}, + }, + want: true, + }, + { + name: "expect false", + args: args{ + slice: []string{"tes", "Test"}, + vals: []string{"testing"}, + }, + want: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := StringSliceContainsAny(tt.args.slice, tt.args.vals); got != tt.want { + t.Errorf("StringSliceContainsAny() = %v, want %v", got, tt.want) + } + }) + } +} \ No newline at end of file