media: support rss movie items with tmdb ids (#22)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"}})
|
||||
|
||||
Reference in New Issue
Block a user