media: support rss movie items with tmdb ids (#22)

This commit is contained in:
l3uddz
2021-02-21 22:30:56 +00:00
committed by GitHub
parent db9fdc97a2
commit 10a70f1da2
10 changed files with 118 additions and 57 deletions

View File

@@ -9,13 +9,19 @@ import (
)
func (c *Client) GetMovieInfo(item *FeedItem) (*Item, error) {
// retrieve and validate media provider data
mdp, mdi := item.GetProviderData()
if mdp == "" || mdi == "" {
return nil, fmt.Errorf("trakt: get movie: no media provider details found")
}
// lookup on trakt
t, err := c.trakt.GetMovie(item.ImdbId)
t, err := c.trakt.GetMovie(mdp, mdi)
if err != nil {
if errors.Is(err, trakt.ErrItemNotFound) {
return nil, fmt.Errorf("trakt: get movie: movie with imdbId %q: %w", item.ImdbId, ErrItemNotFound)
return nil, fmt.Errorf("trakt: get movie: movie with %sId %q: %w", mdp, mdi, ErrItemNotFound)
}
return nil, fmt.Errorf("trakt: get movie: movie with imdbId %q: %w", item.ImdbId, err)
return nil, fmt.Errorf("trakt: get movie: movie with %sId %q: %w", mdp, mdi, err)
}
// transform trakt info

View File

@@ -8,13 +8,19 @@ import (
)
func (c *Client) GetShowInfo(item *FeedItem) (*Item, error) {
// retrieve and validate media provider data
mdp, mdi := item.GetProviderData()
if mdp == "" || mdi == "" {
return nil, fmt.Errorf("trakt: get show: no media provider details found")
}
// lookup on trakt
t, err := c.trakt.GetShow(item.TvdbId)
t, err := c.trakt.GetShow(mdp, mdi)
if err != nil {
if errors.Is(err, trakt.ErrItemNotFound) {
return nil, fmt.Errorf("trakt: get show: show with tvdbId %q: %w", item.TvdbId, ErrItemNotFound)
return nil, fmt.Errorf("trakt: get show: show with %sId %q: %w", mdp, mdi, ErrItemNotFound)
}
return nil, fmt.Errorf("trakt: get show: show with tvdbId %q: %w", item.TvdbId, err)
return nil, fmt.Errorf("trakt: get show: show with %sId %q: %w", mdp, mdi, err)
}
// transform trakt info to MediaItem

View File

@@ -8,6 +8,8 @@ import (
"time"
)
/* Media Item(s) */
type Item struct {
TvdbId string `json:"TvdbId,omitempty"`
TmdbId string `json:"TmdbId,omitempty"`
@@ -33,6 +35,20 @@ type Item struct {
Tvdb tvdb.Item `json:"Tvdb,omitempty"`
}
func (i *Item) GetProviderData() (string, string) {
switch {
case i.TvdbId != "" && i.TvdbId != "0":
return "tvdb", i.TvdbId
case i.TmdbId != "" && i.TmdbId != "0":
return "tmdb", i.TmdbId
case i.ImdbId != "":
return "imdb", i.ImdbId
}
return "", ""
}
/* Rss Item(s) */
type Rss struct {
Channel struct {
Items []FeedItem `xml:"item"`
@@ -53,6 +69,7 @@ type FeedItem struct {
TvdbId string `xml:"tvdb,omitempty"`
TvMazeId string
ImdbId string `xml:"imdb,omitempty"`
TmdbId string `xml:"tmdb,omitempty"`
Attributes []struct {
XMLName xml.Name
@@ -61,6 +78,18 @@ type FeedItem struct {
} `xml:"attr"`
}
func (f *FeedItem) GetProviderData() (string, string) {
switch {
case f.TvdbId != "" && f.TvdbId != "0":
return "tvdb", f.TvdbId
case f.TmdbId != "" && f.TmdbId != "0":
return "tmdb", f.TmdbId
case f.ImdbId != "":
return "imdb", f.ImdbId
}
return "", ""
}
// Time credits: https://github.com/mrobinsn/go-newznab/blob/cd89d9c56447859fa1298dc9a0053c92c45ac7ef/newznab/structs.go#L150
type Time struct {
time.Time

View File

@@ -13,9 +13,9 @@ var (
ErrItemNotFound = errors.New("not found")
)
func (c *Client) GetShow(tvdbId string) (*Show, error) {
func (c *Client) GetShow(providerType string, providerId string) (*Show, error) {
// prepare request
reqUrl, err := util.URLWithQuery(util.JoinURL(c.apiURL, "search", "tvdb", tvdbId),
reqUrl, err := util.URLWithQuery(util.JoinURL(c.apiURL, "search", providerType, providerId),
url.Values{
"type": []string{"show"},
"extended": []string{"full"}})
@@ -52,9 +52,9 @@ func (c *Client) GetShow(tvdbId string) (*Show, error) {
return show, nil
}
func (c *Client) GetMovie(imdbId string) (*Movie, error) {
func (c *Client) GetMovie(providerType string, providerId string) (*Movie, error) {
// prepare request
reqUrl, err := util.URLWithQuery(util.JoinURL(c.apiURL, "search", "imdb", imdbId),
reqUrl, err := util.URLWithQuery(util.JoinURL(c.apiURL, "search", providerType, providerId),
url.Values{
"type": []string{"movie"},
"extended": []string{"full"}})