示例#1
0
    def __init__(self):
        self.addon = xbmcaddon.Addon('plugin.video.themoviedb.helper')
        self.addonpath = self.addon.getAddonInfo('path')
        self.prefixname = 'TMDbHelper.'
        self.kodimoviedb = None
        self.koditvshowdb = None
        self.details_tv = None

        cache_long = self.addon.getSettingInt('cache_details_days')
        cache_short = self.addon.getSettingInt('cache_list_days')
        # tmdb_apikey = self.addon.getSettingString('tmdb_apikey')
        tmdb_apikey = None
        omdb_apikey = self.addon.getSettingString('omdb_apikey')
        # fanarttv_apikey = self.addon.getSettingString('fanarttv_apikey')
        fanarttv_apikey = None
        fanarttv_clientkey = self.addon.getSettingString('fanarttv_clientkey')
        language = LANGUAGES[self.addon.getSettingInt('language')]
        mpaa_prefix = self.addon.getSettingString('mpaa_prefix')

        self.tmdb = TMDb(
            api_key=tmdb_apikey, language=language, cache_long=cache_long, cache_short=cache_short,
            append_to_response=APPEND_TO_RESPONSE, mpaa_prefix=mpaa_prefix)

        self.omdb = OMDb(api_key=omdb_apikey, cache_long=cache_long, cache_short=cache_short) if omdb_apikey else None

        self.fanarttv = (
            FanartTV(
                api_key=fanarttv_apikey, client_key=fanarttv_clientkey, language=language,
                cache_long=cache_long, cache_short=cache_short)
            if self.addon.getSettingBool('fanarttv_lookup') else None)
示例#2
0
class Plugin(object):
    def __init__(self):
        self.addon = xbmcaddon.Addon('plugin.video.themoviedb.helper')
        self.addonpath = self.addon.getAddonInfo('path')
        self.prefixname = 'TMDbHelper.'
        self.kodimoviedb = None
        self.koditvshowdb = None
        self.details_tv = None
        self.imdb_top250 = None

        cache_long = self.addon.getSettingInt('cache_details_days')
        cache_short = self.addon.getSettingInt('cache_list_days')
        # tmdb_apikey = self.addon.getSettingString('tmdb_apikey')
        tmdb_apikey = None
        omdb_apikey = self.addon.getSettingString('omdb_apikey')
        # fanarttv_apikey = self.addon.getSettingString('fanarttv_apikey')
        fanarttv_apikey = None
        fanarttv_clientkey = self.addon.getSettingString('fanarttv_clientkey')
        language = LANGUAGES[self.addon.getSettingInt('language')]
        mpaa_prefix = self.addon.getSettingString('mpaa_prefix')

        self.tmdb = TMDb(api_key=tmdb_apikey,
                         language=language,
                         cache_long=cache_long,
                         cache_short=cache_short,
                         append_to_response=APPEND_TO_RESPONSE,
                         mpaa_prefix=mpaa_prefix)

        self.omdb = OMDb(api_key=omdb_apikey,
                         cache_long=cache_long,
                         cache_short=cache_short) if omdb_apikey else None

        self.fanarttv = FanartTV(api_key=fanarttv_apikey,
                                 client_key=fanarttv_clientkey,
                                 language=language,
                                 cache_long=cache_long,
                                 cache_short=cache_short)

    def textviewer(self, header, text):
        xbmcgui.Dialog().textviewer(header, text)

    def imageviewer(self, image):
        xbmc.executebuiltin('ShowPicture({0})'.format(image))

    def get_trakt_usernameslug(self, login=False):
        return TraktAPI().get_usernameslug(login=login)

    def get_kodi_person_stats(self, item):
        if item.get('infolabels', {}).get('title'):
            statistics = KodiLibrary().get_person_stats(
                item.get('infolabels', {}).get('title'))
            if statistics:
                item['infoproperties'] = utils.merge_two_dicts(
                    item.get('infoproperties', {}), statistics)
        return item

    def get_tmdb_id(self,
                    query=None,
                    itemtype=None,
                    imdb_id=None,
                    tvdb_id=None,
                    year=None,
                    **kwargs):
        if kwargs.get('tmdb_id'):
            return kwargs.get('tmdb_id')
        query = utils.split_items(query)[0] if query else None
        itemtype = itemtype or TMDB_LISTS.get(
            kwargs.get('info'), {}).get('tmdb_check_id') or kwargs.get('type')
        return self.tmdb.get_tmdb_id(itemtype=itemtype,
                                     imdb_id=imdb_id,
                                     tvdb_id=tvdb_id,
                                     query=query,
                                     year=year,
                                     longcache=True)

    def get_omdb_ratings(self, item, cache_only=False):
        imdb_id = item.get('infolabels', {}).get('imdbnumber')
        if not imdb_id or not imdb_id.startswith('tt'):
            imdb_id = item.get('infoproperties', {}).get('imdb_id')
        if not imdb_id or not imdb_id.startswith('tt'):
            imdb_id = item.get('infoproperties', {}).get('tvshow.imdb_id')
        if self.omdb and imdb_id:
            ratings_awards = self.omdb.get_ratings_awards(
                imdb_id=imdb_id, cache_only=cache_only)
            if ratings_awards:
                item['infoproperties'] = utils.merge_two_dicts(
                    item.get('infoproperties', {}), ratings_awards)
        return item

    def get_trakt_ratings(self,
                          item,
                          tmdbtype=None,
                          tmdb_id=None,
                          season=None,
                          episode=None):
        imdb_id = self.tmdb.get_item_externalid(itemtype=tmdbtype,
                                                tmdb_id=tmdb_id,
                                                external_id='imdb_id')
        if tmdbtype and imdb_id:
            ratings = TraktAPI().get_ratings(tmdbtype=tmdbtype,
                                             imdb_id=imdb_id,
                                             season=season,
                                             episode=episode)
            if ratings:
                item['infoproperties'] = utils.merge_two_dicts(
                    item.get('infoproperties', {}), ratings)
        return item

    def get_top250_rank(self, item):
        if not self.imdb_top250:
            self.imdb_top250 = [
                i.get('movie', {}).get('ids', {}).get('tmdb')
                for i in TraktAPI().get_imdb_top250()
            ]
        try:
            item['infolabels']['top250'] = self.imdb_top250.index(
                item.get('infoproperties', {}).get('tmdb_id')) + 1
        except Exception:
            pass
        return item

    def get_kodi_artwork(self, item, dbtype=None, dbid=None):
        if not dbid:
            return item

        details = {}
        if dbtype == 'movies':
            details = KodiLibrary().get_movie_details(dbid)
        elif dbtype == 'tvshows':
            details = KodiLibrary().get_tvshow_details(dbid)
        elif dbtype == 'episodes':
            details = KodiLibrary().get_episode_details(dbid)

        if not details:
            return item

        item['icon'] = details.get('icon') or item.get('icon') or ''
        item['thumb'] = details.get('thumb') or item.get('thumb') or ''
        item['poster'] = details.get('poster') or item.get('poster') or ''
        item['fanart'] = details.get('fanart') or item.get('fanart') or ''
        item['landscape'] = details.get('landscape') or item.get(
            'landscape') or ''
        item['clearart'] = details.get('clearart') or item.get(
            'clearart') or ''
        item['clearlogo'] = details.get('clearlogo') or item.get(
            'clearlogo') or ''
        item['discart'] = details.get('discart') or item.get('discart') or ''

        return item

    def get_fanarttv_artwork(self,
                             item,
                             tmdbtype=None,
                             tmdb_id=None,
                             tvdb_id=None):
        if not self.fanarttv or tmdbtype not in ['movie', 'tv']:
            return item

        artwork, lookup_id, func = None, None, None

        if tmdbtype == 'tv':
            lookup_id = tvdb_id or item.get(
                'infoproperties',
                {}).get('tvshow.tvdb_id') or item.get('tvdb_id')
            func = self.fanarttv.get_tvshow_allart_lc
        elif tmdbtype == 'movie':
            lookup_id = tmdb_id or item.get('tmdb_id')
            func = self.fanarttv.get_movie_allart_lc

        if not lookup_id or not func:
            return item

        artwork = func(lookup_id)

        if artwork:
            item['discart'] = item.get('discart') or artwork.get(
                'discart') or ''
            item['clearart'] = item.get('clearart') or artwork.get(
                'clearart') or ''
            item['clearlogo'] = item.get('clearlogo') or artwork.get(
                'clearlogo') or ''
            item['landscape'] = item.get('landscape') or artwork.get(
                'landscape') or ''
            item['banner'] = item.get('banner') or artwork.get('banner') or ''
            item['fanart'] = item.get('fanart') or artwork.get('fanart') or ''
            item['extrafanart'] = item.get(
                'extrafanart') or utils.iterate_extraart(
                    artwork.get('extrafanart', [])) or ''

        return item

    def get_db_info(self,
                    info=None,
                    tmdbtype=None,
                    imdb_id=None,
                    originaltitle=None,
                    title=None,
                    year=None,
                    tvshowtitle=None,
                    season=None,
                    episode=None,
                    tmdb_id=None,
                    tvdb_id=None):
        dbid = None
        kodidatabase = None
        if tmdbtype == 'movie':
            kodidatabase = self.kodimoviedb = self.kodimoviedb or KodiLibrary(
                dbtype='movie')
        if tmdbtype == 'tv':
            kodidatabase = self.koditvshowdb = self.koditvshowdb or KodiLibrary(
                dbtype='tvshow')
        if kodidatabase and info:
            return kodidatabase.get_info(info=info,
                                         imdb_id=imdb_id,
                                         tmdb_id=tmdb_id,
                                         tvdb_id=tvdb_id,
                                         originaltitle=originaltitle,
                                         title=title,
                                         year=year)
        if tmdbtype == 'episode':
            kodidatabase = self.koditvshowdb = self.koditvshowdb or KodiLibrary(
                dbtype='tvshow')
            dbid = kodidatabase.get_info(info='dbid',
                                         imdb_id=imdb_id,
                                         tmdb_id=tmdb_id,
                                         tvdb_id=tvdb_id,
                                         title=tvshowtitle,
                                         year=year)
            kodidatabase = KodiLibrary(dbtype='episode', tvshowid=dbid)
        if dbid and kodidatabase and season and episode:
            return kodidatabase.get_info('dbid',
                                         season=season,
                                         episode=episode)