Exemplo n.º 1
0
 def get_season_info(self):
     return database.get(
         TraktAPI().json_response, 12,
         'shows/%s/seasons?extended=full' % self.show_trakt_id)
Exemplo n.º 2
0
 def trakt_api(self):
     from resources.lib.indexers.trakt import TraktAPI
     return TraktAPI()
Exemplo n.º 3
0
 def __init__(self):
     self.trakt = TraktAPI()
     self.movies_database = movies.TraktSyncDatabase()
     self.list_builder = ListBuilder()
     self.page_limit = g.get_int_setting("item.limit")
Exemplo n.º 4
0
import sys, json
from resources.lib.common import tools
from resources.lib.indexers.trakt import TraktAPI
from resources.lib.indexers.tmdb import TMDBAPI
from resources.lib.indexers.imdb import scraper as imdb_scraper
from resources.lib.modules import database
from threading import Thread

sysaddon = sys.argv[0]
syshandle = int(sys.argv[1])
trakt = TraktAPI()
tmdbAPI = TMDBAPI()
imdb_scraper = imdb_scraper()


class Menus:
    def __init__(self):
        self.itemList = []
        self.threadList = []
        self.viewType = tools.getSetting('movie.view')

    ######################################################
    # MENUS
    ######################################################

    def onDeckMovies(self):
        traktList = [
            i['movie']
            for i in trakt.json_response('sync/playback/movies', limit=True)
        ]
        showList = []
Exemplo n.º 5
0
    def smart_play_show(self, append_playlist=False):

        self.window = windows.smart_play_background()

        self.window.setBackground(self.poster)

        self.window.setText(tools.lang(32094))
        if not append_playlist:
            self.window.show()
        self.window.setProgress(0)
        self.window.setProgress(40)
        self.window.setText(tools.lang(32095))

        if not append_playlist:
            tools.playList.clear()

        if 'episodeInfo' not in self.info_dictionary:
            if tools.getSetting('trakt.auth') == '':
                tools.showDialog.ok(tools.addonName, tools.lang(32093))
                return
            else:
                self.user_history = TraktAPI().json_response(
                    'sync/history/shows/%s' % self.show_trakt_id)

            season, episode = self.get_resume_episode()

            if self.final_episode_check(season, episode) is True:
                season = 1
                episode = 1

        else:
            season = self.info_dictionary['episodeInfo']['info']['season']
            episode = self.info_dictionary['episodeInfo']['info']['episode']

        self.window.setText(tools.lang(32096))
        self.window.setProgress(60)

        if append_playlist:
            # Add next seasons episodes to the currently playing playlist and then finish up

            playlist = tvshowMenus.Menus().episodeListBuilder(
                self.show_trakt_id, season, hide_unaired=True, smartPlay=True)
            for i in playlist:
                # Confirm that the episode meta we have received from TVDB are for the correct episodes
                # If trakt provides the incorrect TVDB ID it's possible to begin play from the incorrect episode
                params = dict(tools.parse_qsl(i[0].replace('?', '')))
                actionArgs = json.loads(params.get('actionArgs'))
                if actionArgs['episodeInfo']['info']['episode'] < episode:
                    continue

                # If the episode is confirmed ok, add it to our playlist.
                tools.playList.add(url=i[0], listitem=i[1])
            return

        season_episodes = tvshowMenus.Menus().episodeListBuilder(
            self.show_trakt_id, season, smartPlay=True)

        self.window.setText(tools.lang(32097))
        self.window.setProgress(80)

        playlist = []

        for ep in season_episodes:
            path_arguments = dict(tools.parse_qsl(ep[0].replace('?', '')))
            episode_args = json.loads(
                tools.unquote(path_arguments['actionArgs']))
            ep_no = int(episode_args['episodeInfo']['info']['episode'])
            if ep_no >= episode:
                playlist.append(ep)

        self.window.setText('Starting Playback')
        self.window.setProgress(100)

        for i in playlist:
            tools.playList.add(url=i[0], listitem=i[1])

        tools.log(
            'Begining play from Season %s Episode %s' % (season, episode),
            'info')

        self.window.close()

        tools.player().play(tools.playList)
Exemplo n.º 6
0
 def traktProgressWorker(self, trakt_object):
     progress = database.get(TraktAPI().json_response, .5, 'shows/%s/progress/watched?extended=full' % trakt_object['show']['ids']['trakt'])
     trakt_object['progress'] = progress
     self.itemList.append(trakt_object)
Exemplo n.º 7
0
    def smart_play_show(self, append_playlist=False):

        self.window = windows.smart_play_background()

        self.window.setBackground(self.poster)

        self.window.setText(tools.lang(32094).encode('utf-8'))
        if not append_playlist:
            self.window.show()
        self.window.setProgress(0)
        self.window.setProgress(40)
        self.window.setText(tools.lang(32095).encode('utf-8'))

        if not append_playlist:
            tools.playList.clear()

        if 'episodeInfo' not in self.info_dictionary:
            if tools.getSetting('trakt.auth') == '':
                tools.showDialog.ok(tools.addonName,
                                    tools.lang(32093).encode('utf-8'))
                return
            season, episode = self.get_resume_episode()

            if self.final_episode_check(season, episode) is True:
                season = 1
                episode = 1

            season_object = TraktAPI().json_response(
                'shows/%s/seasons?extended=full' %
                self.info_dictionary['ids']['trakt'])
            season_object = [x for x in season_object if x['number'] == season]
            self.info_dictionary = tvshowMenus.Menus().seasonListBuilder(
                season_object, self.info_dictionary, smartPlay=True)
            self.info_dictionary = json.loads(
                tools.unquote(self.info_dictionary))
        else:
            season = self.info_dictionary['episodeInfo']['info']['season']
            episode = self.info_dictionary['episodeInfo']['info']['episode']

        self.window.setText(tools.lang(32096).encode('utf-8'))
        self.window.setProgress(60)

        episode_list = database.get(
            TraktAPI().json_response, 12, 'shows/%s/seasons/%s?extended=full' %
            (self.show_trakt_id, str(season)))

        playlist = []

        for i in episode_list:
            if i['number'] < episode:
                continue
            playlist.append(i)

        if append_playlist:
            tools.log("STARTING PLAYLIST GENERATION")
            playlist = tvshowMenus.Menus().episodeListBuilder(
                playlist, self.info_dictionary, smartPlay=True)
            for i in playlist:
                # Confirm that the episode meta we have received from TVDB are for the correct episodes
                # If trakt provides the incorrect TVDB ID it's possible to begin play from the incorrect episode
                params = dict(tools.parse_qsl(i[0].replace('?', '')))
                actionArgs = json.loads(params.get('actionArgs'))
                if actionArgs['episodeInfo']['info']['episode'] < episode:
                    continue

                # If the episode is confirmed ok, add it to our playlist.
                tools.log("ADDING ITEM TO PLAYLIST")
                tools.playList.add(url=i[0], listitem=i[1])
            return

        self.window.setText(tools.lang(32097).encode('utf-8'))
        self.window.setProgress(80)

        actionArgs = {}
        actionArgs['playlist'] = playlist
        actionArgs['info_dictionary'] = self.info_dictionary
        actionArgs = tools.quote(json.dumps(actionArgs))

        # Begin nasty Kodi 18 Skin workaround

        tools.execute(
            'RunPlugin(plugin://plugin.video.%s?action=buildPlaylist&actionArgs=%s)'
            % (tools.addonName.lower(), actionArgs))

        self.window.close()
    def __init__(
        self,
        tmdb_api=None,
        tvdb_api=None,
        fanarttv_api=None,
        trakt_api=None,
        omdb_api=None,
    ):
        self.tmdb_api = tmdb_api if tmdb_api else TMDBAPI()
        self.tvdb_api = tvdb_api if tvdb_api else TVDBAPI()
        self.fanarttv_api = fanarttv_api if fanarttv_api else FanartTv()
        self.trakt_api = trakt_api if trakt_api else TraktAPI()
        self.omdb_api = omdb_api if omdb_api else OmdbApi()

        self.lang_code = g.get_language_code()
        self.lang_full_code = g.get_language_code(True)
        self.lang_region_code = self.lang_full_code.split("-")[:1]
        self.allowed_artwork_languages = {None, "en", self.lang_code}
        self.movies_poster_limit = g.get_int_setting("movies.poster_limit", 1)
        self.movies_fanart_limit = g.get_int_setting("movies.fanart_limit", 1)
        self.movies_keyart_limit = g.get_int_setting("movies.keyart_limit", 1)
        self.movies_characterart_limit = g.get_int_setting(
            "movies.characterart_limit", 1)
        self.movies_banner = g.get_bool_setting("movies.banner", "true")
        self.movies_clearlogo = g.get_bool_setting("movies.clearlogo", "true")
        self.movies_landscape = g.get_bool_setting("movies.landscape", "true")
        self.movies_clearart = g.get_bool_setting("movies.clearart", "true")
        self.movies_discart = g.get_bool_setting("movies.discart", "true")

        self.tvshows_poster_limit = g.get_int_setting("tvshows.poster_limit",
                                                      1)
        self.tvshows_fanart_limit = g.get_int_setting("tvshows.fanart_limit",
                                                      1)
        self.tvshows_keyart_limit = g.get_int_setting("tvshows.keyart_limit",
                                                      1)
        self.tvshows_characterart_limit = g.get_int_setting(
            "tvshows.characterart_limit", 1)
        self.tvshows_banner = g.get_bool_setting("tvshows.banner", "true")
        self.tvshows_clearlogo = g.get_bool_setting("tvshows.clearlogo",
                                                    "true")
        self.tvshows_landscape = g.get_bool_setting("tvshows.landscape",
                                                    "true")
        self.tvshows_clearart = g.get_bool_setting("tvshows.clearart", "true")
        self.season_poster = g.get_bool_setting("season.poster", "true")
        self.season_banner = g.get_bool_setting("season.banner", "true")
        self.season_landscape = g.get_bool_setting("season.landscape", "true")
        self.season_fanart = g.get_bool_setting("season.fanart", "true")
        self.episode_fanart = g.get_bool_setting("episode.fanart", "true")
        self.tvshows_preferred_art_source = g.get_int_setting(
            "tvshows.preferedsource", 1)
        self.movies_preferred_art_source = g.get_int_setting(
            "movies.preferedsource", 1)
        self.metadata_location = g.get_int_setting("general.metalocation", 1)
        self.preferred_artwork_size = g.get_int_setting(
            "artwork.preferredsize", 1)

        self.genres = {
            "action": g.get_language_string(30520),
            "adventure": g.get_language_string(30521),
            "animation": g.get_language_string(30522),
            "anime": g.get_language_string(30523),
            "biography": g.get_language_string(30524),
            "children": g.get_language_string(30525),
            "comedy": g.get_language_string(30526),
            "crime": g.get_language_string(30527),
            "documentary": g.get_language_string(30528),
            "drama": g.get_language_string(30529),
            "family": g.get_language_string(30530),
            "fantasy": g.get_language_string(30531),
            "game-show": g.get_language_string(30532),
            "history": g.get_language_string(30533),
            "holiday": g.get_language_string(30534),
            "home-and-garden": g.get_language_string(30535),
            "horror": g.get_language_string(30536),
            "mini-series": g.get_language_string(30537),
            "music": g.get_language_string(30538),
            "musical": g.get_language_string(30539),
            "mystery": g.get_language_string(30540),
            "news": g.get_language_string(30541),
            "none": g.get_language_string(30542),
            "reality": g.get_language_string(30543),
            "romance": g.get_language_string(30544),
            "science-fiction": g.get_language_string(30545),
            "sci-fi": g.get_language_string(30545),
            "short": g.get_language_string(30546),
            "soap": g.get_language_string(30547),
            "special-interest": g.get_language_string(30548),
            "sporting-event": g.get_language_string(30549),
            "superhero": g.get_language_string(30550),
            "suspense": g.get_language_string(30551),
            "talk-show": g.get_language_string(30552),
            "talkshow": g.get_language_string(30552),
            "thriller": g.get_language_string(30553),
            "tv-movie": g.get_language_string(30554),
            "war": g.get_language_string(30555),
            "western": g.get_language_string(30556),
        }

        self.meta_hash = tools.md5_hash([
            self.lang_code,
            self.movies_poster_limit,
            self.movies_fanart_limit,
            self.movies_keyart_limit,
            self.movies_characterart_limit,
            self.movies_banner,
            self.movies_clearlogo,
            self.movies_landscape,
            self.movies_clearart,
            self.movies_discart,
            self.tvshows_poster_limit,
            self.tvshows_fanart_limit,
            self.tvshows_keyart_limit,
            self.tvshows_characterart_limit,
            self.tvshows_banner,
            self.tvshows_clearlogo,
            self.tvshows_landscape,
            self.tvshows_clearart,
            self.season_poster,
            self.season_banner,
            self.season_landscape,
            self.season_fanart,
            self.episode_fanart,
            self.tvshows_preferred_art_source,
            self.tvshows_preferred_art_source,
            self.metadata_location,
            self.preferred_artwork_size,
            self.tmdb_api.meta_hash,
            self.tvdb_api.meta_hash,
            self.omdb_api.meta_hash,
            self.trakt_api.meta_hash,
            self.fanarttv_api.meta_hash,
            self.fanarttv_api.fanart_support,
        ])
Exemplo n.º 9
0
    def smart_play_show(self):

        self.window = windows.smart_play_background()

        self.window.setBackground(self.poster)

        self.window.setText("Begining SmartPlay")
        self.window.show()
        self.window.setProgress(0)
        self.window.setProgress(40)
        self.window.setText('Identifying Resume Point')

        tools.playList.clear()

        if 'episodeInfo' not in self.info_dictionary:
            if tools.getSetting('trakt.auth') == '':
                tools.showDialog.ok(
                    tools.addonName, 'Error: Trakt is not authorized \n'
                    'Please authorise Trakt in the settings menu to use this feature'
                )
                return
            season, episode = self.get_resume_episode()

            if self.final_episode_check(season, episode) is True:
                season = 1
                episode = 1

            season_object = TraktAPI().json_response(
                'shows/%s/seasons?extended=full' %
                self.info_dictionary['ids']['trakt'])
            season_object = [x for x in season_object if x['number'] == season]
            self.info_dictionary = tvshowMenus.Menus().seasonListBuilder(
                season_object, self.info_dictionary, smartPlay=True)
            self.info_dictionary = json.loads(
                tools.unquote(self.info_dictionary))
        else:
            season = self.info_dictionary['episodeInfo']['info']['season']
            episode = self.info_dictionary['episodeInfo']['info']['episode']

        self.window.setText('Building PlayList')
        self.window.setProgress(60)

        episode_list = database.get(
            TraktAPI().json_response, 12, 'shows/%s/seasons/%s?extended=full' %
            (self.show_trakt_id, str(season)))

        playlist = []

        for i in episode_list:
            if i['number'] < episode:
                continue
            playlist.append(i)

        self.window.setText('Building List Items')
        self.window.setProgress(80)

        actionArgs = {}
        actionArgs['playlist'] = playlist
        actionArgs['info_dictionary'] = self.info_dictionary
        actionArgs = tools.quote(json.dumps(actionArgs))

        # Begin nasty Kodi 18 Skin workaround

        tools.execute(
            'RunPlugin(plugin://plugin.video.%s?action=buildPlaylist&actionArgs=%s)'
            % (tools.addonName.lower(), actionArgs))

        self.window.close()