Files
nabarr/media/client.go

90 lines
1.9 KiB
Go
Raw Permalink Normal View History

package media
import (
"fmt"
"strconv"
"strings"
2022-04-01 20:42:05 +01:00
2022-04-14 16:18:06 +01:00
"github.com/rs/zerolog"
"github.com/l3uddz/nabarr/logger"
"github.com/l3uddz/nabarr/media/omdb"
"github.com/l3uddz/nabarr/media/tmdb"
"github.com/l3uddz/nabarr/media/trakt"
"github.com/l3uddz/nabarr/media/tvdb"
"github.com/l3uddz/nabarr/util"
)
type Client struct {
trakt *trakt.Client
omdb *omdb.Client
tvdb *tvdb.Client
tmdb *tmdb.Client
log zerolog.Logger
}
func (c *Client) EnrichFeedItemWithTmdbId(item *FeedItem) {
if c.tmdb == nil {
return
}
// skip if a valid ID is already present
hasId := (item.TvdbId != "" && !util.StringSliceContains([]string{"0", "1"}, item.TvdbId)) ||
(item.ImdbId != "" && strings.HasPrefix(item.ImdbId, "tt")) ||
(item.TmdbId != "" && !util.StringSliceContains([]string{"0", "1"}, item.TmdbId))
if hasId {
return
}
title, year := tmdb.ExtractTitleAndYear(item.Title)
if title == "" {
return
}
var tmdbId int
switch {
case util.ContainsMovieCategory(item.Categories):
if id, err := c.tmdb.SearchMovies(title, year); err == nil && id > 0 {
tmdbId = id
}
case util.ContainsTvCategory(item.Categories):
if id, err := c.tmdb.SearchShows(title, year); err == nil && id > 0 {
tmdbId = id
}
default:
return
}
if tmdbId > 0 {
item.TmdbId = strconv.Itoa(tmdbId)
c.log.Info().
Str("release", item.Title).
Str("clean_title", title).
Int("year", year).
Int("tmdb_id", tmdbId).
Msg("Enriched item with TMDB ID via title search")
}
}
func New(cfg *Config) (*Client, error) {
// validate trakt configured (it is mandatory)
if cfg.Trakt.ClientId == "" {
return nil, fmt.Errorf("trakt: no client_id specified")
}
var tmdbClient *tmdb.Client
if cfg.Tmdb.ApiKey != "" {
tmdbClient = tmdb.New(&cfg.Tmdb)
}
return &Client{
trakt: trakt.New(&cfg.Trakt),
omdb: omdb.New(&cfg.Omdb),
tvdb: tvdb.New(&cfg.Tvdb),
tmdb: tmdbClient,
2022-04-14 16:18:06 +01:00
log: logger.Child(logger.WithLevel(cfg.Verbosity)),
}, nil
}