Exemplo n.º 1
0
    def addShowToTraktLibrary(self, show_obj):
        """
        Sends a request to trakt indicating that the given show and all its episodes is part of our library.

        show_obj: The TVShow object to add to trakt
        """

        data = {}

        if not self.findShow(show_obj.indexer, show_obj.indexerid):
            # URL parameters
            data['tvdb_id'] = helpers.mapIndexersToShow(show_obj)[1]
            data['title'] = show_obj.name
            data['year'] = show_obj.startyear

        if len(data):
            logger.log(u"Adding " + show_obj.name + " to trakt.tv library",
                       logger.DEBUG)

            try:
                self.trakt_api.traktRequest("show/library/%APIKEY%",
                                            data,
                                            method='POST')
            except (traktException, traktAuthException, traktServerBusy) as e:
                logger.log(u"Could not connect to Trakt service: %s" % ex(e),
                           logger.WARNING)
                return
Exemplo n.º 2
0
    def _get_season_search_strings(self, ep_obj):

        to_return = []
        cur_params = {}

        # season
        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate).split("-")[0]
            cur_params["season"] = date_str
            cur_params["q"] = date_str.replace("-", ".")
        elif ep_obj.show.is_anime:
            cur_params["season"] = "%d" % ep_obj.scene_absolute_number
        else:
            cur_params["season"] = str(ep_obj.scene_season)

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            cur_params["rid"] = rid
            to_return.append(cur_params)
        else:
            # add new query strings for exceptions
            name_exceptions = list(
                set(scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) + [ep_obj.show.name])
            )
            for cur_exception in name_exceptions:
                if "q" in cur_params:
                    cur_params["q"] = helpers.sanitizeSceneName(cur_exception) + "." + cur_params["q"]
                to_return.append(cur_params)

        return to_return
Exemplo n.º 3
0
    def _get_episode_search_strings(self, ep_obj, add_string=""):
        to_return = []
        params = {}

        if not ep_obj:
            return [params]

        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate)
            params["season"] = date_str.partition("-")[0]
            params["ep"] = date_str.partition("-")[2].replace("-", "/")
        elif ep_obj.show.anime:
            params["ep"] = "%i" % int(ep_obj.scene_absolute_number)
        else:
            params["season"] = ep_obj.scene_season
            params["ep"] = ep_obj.scene_episode

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            params["rid"] = rid
            to_return.append(params)
        else:
            # add new query strings for exceptions
            name_exceptions = list(
                set(scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) + [ep_obj.show.name])
            )
            for cur_exception in name_exceptions:
                params["q"] = helpers.sanitizeSceneName(cur_exception)
                to_return.append(params)

        return to_return
Exemplo n.º 4
0
    def _retrieve_show_images_from_fanart(self, show, type, thumb=False):
        types = {
            "poster": fanart.TYPE.TV.POSTER,
            "banner": fanart.TYPE.TV.BANNER,
            "poster_thumb": fanart.TYPE.TV.POSTER,
            "banner_thumb": fanart.TYPE.TV.BANNER,
            "fanart": fanart.TYPE.TV.BACKGROUND,
        }

        try:
            indexerid = helpers.mapIndexersToShow(show)[1]
            if indexerid:
                request = fanartRequest(
                    apikey=sickbeard.FANART_API_KEY,
                    id=indexerid,
                    ws=fanart.WS.TV,
                    type=types[type],
                    sort=fanart.SORT.POPULAR,
                    limit=fanart.LIMIT.ONE,
                )

                resp = request.response()
                url = resp[types[type]][0]["url"]
                if thumb:
                    url = re.sub("/fanart/", "/preview/", url)
                return url
        except Exception as e:
            pass

        logger.log(u"Could not find any " + type + " images on Fanart.tv for " + show.name, logger.DEBUG)
Exemplo n.º 5
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):
        to_return = []
        params = {}

        if not ep_obj:
            return [params]

        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate)
            params['season'] = date_str.partition('-')[0]
            params['ep'] = date_str.partition('-')[2].replace('-', '/')
        elif ep_obj.show.anime:
            params['ep'] = "%i" % int(ep_obj.scene_absolute_number)
        else:
            params['season'] = ep_obj.scene_season
            params['ep'] = ep_obj.scene_episode

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            cur_return = params.copy()
            cur_return['rid'] = rid
            to_return.append(cur_return)

        # add new query strings for exceptions
        name_exceptions = list(
            set(
                scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) +
                [ep_obj.show.name]))
        for cur_exception in name_exceptions:
            params['q'] = helpers.sanitizeSceneName(cur_exception)
            to_return.append(params)

        return to_return
Exemplo n.º 6
0
    def _get_season_search_strings(self, ep_obj):

        to_return = []
        cur_params = {}

        # season
        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate).split('-')[0]
            cur_params['season'] = date_str
            cur_params['q'] = date_str.replace('-', '.')
        elif ep_obj.show.is_anime:
            cur_params['season'] = "%d" % ep_obj.scene_absolute_number
        else:
            cur_params['season'] = str(ep_obj.scene_season)

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            cur_return = cur_params.copy()
            cur_return['rid'] = rid
            to_return.append(cur_return)

        # add new query strings for exceptions
        name_exceptions = list(
            set(scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) + [ep_obj.show.name]))
        for cur_exception in name_exceptions:
            if 'q' in cur_params:
                cur_params['q'] = helpers.sanitizeSceneName(cur_exception) + '.' + cur_params['q']
            to_return.append(cur_params)

        return to_return
Exemplo n.º 7
0
    def _get_season_search_strings(self, ep_obj):

        to_return = []
        cur_params = {}

        # season
        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate).split('-')[0]
            cur_params['season'] = date_str
            cur_params['q'] = date_str.replace('-', '.')
        elif ep_obj.show.is_anime:
            cur_params['season'] = "%d" % ep_obj.scene_absolute_number
        else:
            cur_params['season'] = str(ep_obj.scene_season)

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            cur_return = cur_params.copy()
            cur_return['rid'] = rid
            to_return.append(cur_return)

        # add new query strings for exceptions
        name_exceptions = list(
            set(
                scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) +
                [ep_obj.show.name]))
        for cur_exception in name_exceptions:
            if 'q' in cur_params:
                cur_params['q'] = helpers.sanitizeSceneName(
                    cur_exception) + '.' + cur_params['q']
            to_return.append(cur_params)

        return to_return
Exemplo n.º 8
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):
        to_return = []
        params = {}

        if not ep_obj:
            return [params]

        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate)
            params['season'] = date_str.partition('-')[0]
            params['ep'] = date_str.partition('-')[2].replace('-', '/')
        elif ep_obj.show.anime:
            params['ep'] = "%i" % int(ep_obj.scene_absolute_number)
        else:
            params['season'] = ep_obj.scene_season
            params['ep'] = ep_obj.scene_episode

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            cur_return = params.copy()
            cur_return['rid'] = rid
            to_return.append(cur_return)

        # add new query strings for exceptions
        name_exceptions = list(
            set(scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) + [ep_obj.show.name]))
        for cur_exception in name_exceptions:
            params['q'] = helpers.sanitizeSceneName(cur_exception)
            to_return.append(params)

        return to_return
Exemplo n.º 9
0
    def _retrieve_show_images_from_fanart(self, show, img_type, thumb=False):
        types = {
            'poster': fanart_module.TYPE.TV.POSTER,
            'banner': fanart_module.TYPE.TV.BANNER,
            'poster_thumb': fanart_module.TYPE.TV.POSTER,
            'banner_thumb': fanart_module.TYPE.TV.BANNER,
            'fanart': fanart_module.TYPE.TV.BACKGROUND,
        }

        try:
            indexerid = helpers.mapIndexersToShow(show)[1]
            if indexerid:
                request = fanartRequest(
                    apikey=sickbeard.FANART_API_KEY,
                    id=indexerid,
                    ws=fanart_module.WS.TV,
                    type=types[img_type],
                    sort=fanart_module.SORT.POPULAR,
                    limit=fanart_module.LIMIT.ONE,
                )

                resp = request.response()
                url = resp[types[img_type]][0]['url']
                if thumb:
                    url = re.sub('/fanart/', '/preview/', url)
                return url
        except Exception:
            pass

        logger.log(
            "Could not find any " + img_type + " images on Fanart.tv for " +
            show.name, logger.INFO)
Exemplo n.º 10
0
    def _episode_strings(self, ep_obj):

        search_params = []
        base_params = {}

        if not ep_obj:
            return [base_params]

        if ep_obj.show.air_by_date or ep_obj.show.is_sports:
            date_str = str(ep_obj.airdate)
            base_params['season'] = date_str.partition('-')[0]
            base_params['ep'] = date_str.partition('-')[2].replace('-', '/')
        elif ep_obj.show.is_anime:
            base_params['ep'] = '%i' % int(ep_obj.scene_absolute_number if int(
                ep_obj.scene_absolute_number) > 0 else ep_obj.scene_episode)
        else:
            base_params['season'], base_params['ep'] = (
                (ep_obj.season,
                 ep_obj.episode), (ep_obj.scene_season,
                                   ep_obj.scene_episode))[ep_obj.show.is_scene]

        # search
        ids = helpers.mapIndexersToShow(ep_obj.show)
        if ids[1]:  # or ids[2]:
            params = base_params.copy()
            use_id = False
            if ids[1]:
                if self.supports_tvdbid():
                    params['tvdbid'] = ids[1]
                use_id = True
            if ids[2]:
                params['rid'] = ids[2]
                use_id = True
            use_id and search_params.append(params)

        # add new query strings for exceptions
        name_exceptions = list(
            set([
                helpers.sanitizeSceneName(a) for a in
                scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) +
                [ep_obj.show.name]
            ]))

        for cur_exception in name_exceptions:
            params = base_params.copy()
            params['q'] = cur_exception
            search_params.append(params)

            if ep_obj.show.is_anime:
                # Experimental, add a search string without search explicitly for the episode!
                # Remove the ?ep=e46 parameter and use the episode number to the query parameter.
                # Can be useful for newznab indexers that do not have the episodes 100% parsed.
                # Start with only applying the search string to anime shows
                params = base_params.copy()
                params['q'] = '%s.%02d' % (cur_exception, int(params['ep']))
                if 'ep' in params:
                    params.pop('ep')
                search_params.append(params)

        return [{'Episode': search_params}]
Exemplo n.º 11
0
    def _retrieve_show_images_from_fanart(self, show, img_type, thumb=False):
        types = {
            'poster': fanart.TYPE.TV.POSTER,
            'banner': fanart.TYPE.TV.BANNER,
            'poster_thumb': fanart.TYPE.TV.POSTER,
            'banner_thumb': fanart.TYPE.TV.BANNER,
            'fanart': fanart.TYPE.TV.BACKGROUND,
        }

        try:
            indexerid = helpers.mapIndexersToShow(show)[1]
            if indexerid:
                request = fanartRequest(
                    apikey=sickbeard.FANART_API_KEY,
                    id=indexerid,
                    ws=fanart.WS.TV,
                    type=types[img_type],
                    sort=fanart.SORT.POPULAR,
                    limit=fanart.LIMIT.ONE,
                )

                resp = request.response()
                url = resp[types[img_type]][0]['url']
                if thumb:
                    url = re.sub('/fanart/', '/preview/', url)
                return url
        except Exception:
            pass

        logger.log(u"Could not find any " + img_type + " images on Fanart.tv for " + show.name, logger.INFO)
Exemplo n.º 12
0
    def _build_search_str(ep_obj, search_params):

        if 1 == ep_obj.show.indexer:
            search_params['series_id'] = ep_obj.show.indexerid
        elif 2 == ep_obj.show.indexer:
            tvdbid = mapIndexersToShow(ep_obj.show)[1]
            if tvdbid:
                search_params['series_id'] = tvdbid

        return [search_params]
Exemplo n.º 13
0
    def removeShowFromTraktLibrary(self, show_obj):
        data = {}
        if self.findShow(show_obj.indexer, show_obj.indexerid):
            # URL parameters
            data['tvdb_id'] = helpers.mapIndexersToShow(show_obj)[1]
            data['title'] = show_obj.name
            data['year'] = show_obj.startyear

        if len(data):
            logger.log(u"Removing " + show_obj.name + " from trakt.tv library", logger.DEBUG)
            TraktCall("show/unlibrary/%API%", sickbeard.TRAKT_API, sickbeard.TRAKT_USERNAME, sickbeard.TRAKT_PASSWORD,
                      data)
Exemplo n.º 14
0
    def removeShowFromTraktLibrary(self, show_obj):
        data = {}
        if self.findShow(show_obj.indexer, show_obj.indexerid):
            # URL parameters
            data['tvdb_id'] = helpers.mapIndexersToShow(show_obj)[1]
            data['title'] = show_obj.name
            data['year'] = show_obj.startyear

        if len(data):
            logger.log(u"Removing " + show_obj.name + " from trakt.tv library", logger.DEBUG)
            TraktCall("show/unlibrary/%API%", sickbeard.TRAKT_API, sickbeard.TRAKT_USERNAME, sickbeard.TRAKT_PASSWORD,
                      data)
Exemplo n.º 15
0
    def _get_episode_search_strings(self, ep_obj):
        to_return = []
        params = {}

        if not ep_obj:
            return [params]

        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate)
            params['season'] = date_str.partition('-')[0]
            params['ep'] = date_str.partition('-')[2].replace('-', '/')
        elif ep_obj.show.anime:
            params['ep'] = '%i' % int(ep_obj.scene_absolute_number if int(
                ep_obj.scene_absolute_number) > 0 else ep_obj.scene_episode)
        else:
            params['season'], params[
                'ep'] = ep_obj.scene_season, ep_obj.scene_episode

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            cur_return = params.copy()
            cur_return['rid'] = rid
            to_return.append(cur_return)

        # add new query strings for exceptions
        name_exceptions = list(
            set([
                helpers.sanitizeSceneName(a) for a in
                scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) +
                [ep_obj.show.name]
            ]))
        for cur_exception in name_exceptions:
            cur_return = params.copy()
            cur_return['q'] = cur_exception
            to_return.append(cur_return)

            if ep_obj.show.anime:
                # Experimental, add a searchstring without search explicitly for the episode!
                # Remove the ?ep=e46 paramater and use add the episode number to the query paramater.
                # Can be usefull for newznab indexers that do not have the episodes 100% parsed.
                # Start with only applying the searchstring to anime shows
                params['q'] = cur_exception
                params_no_ep = params.copy()

                params_no_ep['q'] = '%s.%02d' % (params_no_ep['q'],
                                                 int(params_no_ep['ep']))
                if 'ep' in params_no_ep:
                    params_no_ep.pop('ep')
                to_return.append(params_no_ep)

        return to_return
Exemplo n.º 16
0
    def removeShowFromTraktLibrary(self, show_obj):
        if self.findShow(show_obj.indexer, show_obj.indexerid):
            # URL parameters
            data = {'tvdb_id': helpers.mapIndexersToShow(show_obj)[1], 'title': show_obj.name,
                    'year': show_obj.startyear}


            logger.log(u"Removing " + show_obj.name + " from trakt.tv library", logger.DEBUG)
            try:
                self.trakt_api.traktRequest("show/unlibrary/%APIKEY%", data, method='POST')
            except (traktException, traktAuthException, traktServerBusy) as e:
                logger.log(u"Could not connect to Trakt service: %s" % ex(e), logger.WARNING)
                pass
Exemplo n.º 17
0
    def _get_season_search_strings(self, ep_obj):
        search_params = {'limit': 100}

        search_params['season'] = 'Season %02d' % ep_obj.scene_season

        if ep_obj.show.indexer == 1:
            search_params['series_id'] = ep_obj.show.indexerid
        elif ep_obj.show.indexer == 2:
            tvdbid = mapIndexersToShow(ep_obj.show)[1]
            if tvdbid:
                search_params['series_id'] = tvdbid

        return [search_params]
Exemplo n.º 18
0
    def _get_season_search_strings(self, ep_obj):
        search_params = {"limit": 100}

        search_params["season"] = "Season %02d" % ep_obj.scene_season

        if ep_obj.show.indexer == 1:
            search_params["series_id"] = ep_obj.show.indexerid
        elif ep_obj.show.indexer == 2:
            tvdbid = mapIndexersToShow(ep_obj.show)[1]
            if tvdbid:
                search_params["series_id"] = tvdbid

        return [search_params]
Exemplo n.º 19
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):
        to_return = []
        params = {}

        if not ep_obj:
            return [params]

        params['maxage'] = (
            datetime.datetime.now() - datetime.datetime.combine(
                ep_obj.airdate, datetime.datetime.min.time())).days + 1

        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate)
            params['season'] = date_str.partition('-')[0]
            params['ep'] = date_str.partition('-')[2].replace('-', '/')
        elif ep_obj.show.anime:
            params['ep'] = "%i" % int(ep_obj.scene_absolute_number if int(
                ep_obj.scene_absolute_number) > 0 else ep_obj.scene_episode)
        else:
            params['season'] = ep_obj.scene_season
            params['ep'] = ep_obj.scene_episode

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            params['rid'] = rid
        elif 'rid' in params:
            params.pop('rid')

        # add new query strings for exceptions
        name_exceptions = list(
            set(
                scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) +
                [ep_obj.show.name]))
        for cur_exception in name_exceptions:
            params['q'] = helpers.sanitizeSceneName(cur_exception)
            if add_string:
                params['q'] += ' ' + add_string

            to_return.append(dict(params))

            if ep_obj.show.anime:
                paramsNoEp = params.copy()
                paramsNoEp['q'] = paramsNoEp['q'] + " " + paramsNoEp['ep']
                if "ep" in paramsNoEp:
                    paramsNoEp.pop("ep")
                to_return.append(paramsNoEp)

        return to_return
Exemplo n.º 20
0
    def _get_episode_search_strings(self, ep_obj):
        to_return = []
        params = {}

        if not ep_obj:
            return [params]

        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate)
            params['season'] = date_str.partition('-')[0]
            params['ep'] = date_str.partition('-')[2].replace('-', '/')
        elif ep_obj.show.anime:
            params['ep'] = '%i' % int(
                ep_obj.scene_absolute_number if int(ep_obj.scene_absolute_number) > 0 else ep_obj.scene_episode)
        else:
            params['season'], params['ep'] = ep_obj.scene_season, ep_obj.scene_episode

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            cur_return = params.copy()
            cur_return['rid'] = rid
            to_return.append(cur_return)

        # add new query strings for exceptions
        name_exceptions = list(
            set([helpers.sanitizeSceneName(a) for a in
                 scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) + [ep_obj.show.name]]))
        for cur_exception in name_exceptions:
            cur_return = params.copy()
            cur_return['q'] = cur_exception
            to_return.append(cur_return)

            if ep_obj.show.anime:
                # Experimental, add a searchstring without search explicitly for the episode!
                # Remove the ?ep=e46 paramater and use add the episode number to the query paramater.
                # Can be usefull for newznab indexers that do not have the episodes 100% parsed.
                # Start with only applying the searchstring to anime shows
                params['q'] = cur_exception
                params_no_ep = params.copy()

                params_no_ep['q'] = '%s.%02d' % (params_no_ep['q'], int(params_no_ep['ep']))
                if 'ep' in params_no_ep:
                    params_no_ep.pop('ep')
                to_return.append(params_no_ep)

        return to_return
Exemplo n.º 21
0
    def removeShowFromTraktLibrary(self, show_obj):
        if self.findShow(show_obj.indexer, show_obj.indexerid):
            # URL parameters
            data = {
                'tvdb_id': helpers.mapIndexersToShow(show_obj)[1],
                'title': show_obj.name,
                'year': show_obj.startyear
            }

            logger.log(u"Removing " + show_obj.name + " from trakt.tv library",
                       logger.DEBUG)
            try:
                self.trakt_api.traktRequest("show/unlibrary/%APIKEY%", data)
            except (traktException, traktAuthException, traktServerBusy) as e:
                logger.log(u"Could not connect to Trakt service: %s" % ex(e),
                           logger.WARNING)
                pass
Exemplo n.º 22
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):

        if not ep_obj:
            return [{}]

        search_params = {'limit': 100}

        # Do a general name search for the episode, formatted like SXXEYY
        search_params['episode'] = 'S%02dE%02d' % (ep_obj.scene_season, ep_obj.scene_episode)

        if ep_obj.show.indexer == 1:
            search_params['series_id'] = ep_obj.show.indexerid
        elif ep_obj.show.indexer == 2:
            tvdbid = mapIndexersToShow(ep_obj.show)[1]
            if tvdbid:
                search_params['series_id'] = tvdbid

        return [search_params]
Exemplo n.º 23
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):
        to_return = []
        params = {}

        if not ep_obj:
            return [params]

        params['maxage'] = (datetime.datetime.now() - datetime.datetime.combine(ep_obj.airdate, datetime.datetime.min.time())).days + 1

        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate)
            params['season'] = date_str.partition('-')[0]
            params['ep'] = date_str.partition('-')[2].replace('-', '/')
        elif ep_obj.show.anime:
            params['ep'] = "%i" % int(ep_obj.scene_absolute_number if int(ep_obj.scene_absolute_number) > 0 else ep_obj.scene_episode)
        else:
            params['season'] = ep_obj.scene_season
            params['ep'] = ep_obj.scene_episode

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            params['rid'] = rid
        elif 'rid' in params:
            params.pop('rid')

        # add new query strings for exceptions
        name_exceptions = list(
            set(scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) + [ep_obj.show.name]))
        for cur_exception in name_exceptions:
            params['q'] = helpers.sanitizeSceneName(cur_exception)
            if add_string:
                params['q'] += ' ' + add_string

            to_return.append(dict(params))

            if ep_obj.show.anime:
                paramsNoEp = params.copy()
                paramsNoEp['q'] = paramsNoEp['q'] + " " + paramsNoEp['ep']
                if "ep" in paramsNoEp:
                    paramsNoEp.pop("ep")
                to_return.append(paramsNoEp)

        return to_return
Exemplo n.º 24
0
    def _season_strings(self, ep_obj):

        search_params = []
        base_params = {}

        # season
        if ep_obj.show.air_by_date or ep_obj.show.is_sports:
            date_str = str(ep_obj.airdate).split('-')[0]
            base_params['season'] = date_str
            base_params['q'] = date_str.replace('-', '.')
        elif ep_obj.show.is_anime:
            base_params['season'] = '%d' % ep_obj.scene_absolute_number
        else:
            base_params['season'] = str(
                (ep_obj.season,
                 ep_obj.scene_season)[bool(ep_obj.show.is_scene)])

        # search
        ids = helpers.mapIndexersToShow(ep_obj.show)
        if ids[1]:  # or ids[2]:
            params = base_params.copy()
            use_id = False
            if ids[1] and self.supports_tvdbid():
                params['tvdbid'] = ids[1]
                use_id = True
            if ids[2]:
                params['rid'] = ids[2]
                use_id = True
            use_id and search_params.append(params)

        # add new query strings for exceptions
        name_exceptions = list(
            set([
                helpers.sanitizeSceneName(a) for a in
                scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) +
                [ep_obj.show.name]
            ]))
        for cur_exception in name_exceptions:
            params = base_params.copy()
            if 'q' in params:
                params['q'] = '%s.%s' % (cur_exception, params['q'])
            search_params.append(params)

        return [{'Season': search_params}]
Exemplo n.º 25
0
    def _season_strings(self, ep_obj):

        search_params = []
        base_params = {}

        # season
        if ep_obj.show.air_by_date or ep_obj.show.is_sports:
            date_str = str(ep_obj.airdate).split("-")[0]
            base_params["season"] = date_str
            base_params["q"] = date_str.replace("-", ".")
        elif ep_obj.show.is_anime:
            base_params["season"] = "%d" % ep_obj.scene_absolute_number
        else:
            base_params["season"] = str((ep_obj.season, ep_obj.scene_season)[bool(ep_obj.show.is_scene)])

        # search
        ids = helpers.mapIndexersToShow(ep_obj.show)
        if ids[1]:  # or ids[2]:
            params = base_params.copy()
            use_id = False
            if ids[1] and self.supports_tvdbid():
                params["tvdbid"] = ids[1]
                use_id = True
            if ids[2]:
                params["rid"] = ids[2]
                use_id = True
            use_id and search_params.append(params)

        # add new query strings for exceptions
        name_exceptions = list(
            set(
                [
                    helpers.sanitizeSceneName(a)
                    for a in scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) + [ep_obj.show.name]
                ]
            )
        )
        for cur_exception in name_exceptions:
            params = base_params.copy()
            if "q" in params:
                params["q"] = "%s.%s" % (cur_exception, params["q"])
            search_params.append(params)

        return [{"Season": search_params}]
Exemplo n.º 26
0
    def addShowToTraktLibrary(self, show_obj):
        """
        Sends a request to trakt indicating that the given show and all its episodes is part of our library.

        show_obj: The TVShow object to add to trakt
        """

        data = {}

        if not self.findShow(show_obj.indexer, show_obj.indexerid):
            # URL parameters
            data['tvdb_id'] = helpers.mapIndexersToShow(show_obj)[1]
            data['title'] = show_obj.name
            data['year'] = show_obj.startyear

        if len(data):
            logger.log(u"Adding " + show_obj.name + " to trakt.tv library", logger.DEBUG)
            TraktCall("show/library/%API%", sickbeard.TRAKT_API, sickbeard.TRAKT_USERNAME, sickbeard.TRAKT_PASSWORD,
                      data)
Exemplo n.º 27
0
    def _get_season_search_strings(self, ep_obj):

        to_return = []
        cur_params = {}
        if not ep_obj:
            return to_return

        cur_params['maxage'] = (
            datetime.datetime.now() - datetime.datetime.combine(
                ep_obj.airdate, datetime.datetime.min.time())).days + 1

        # season
        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate).split('-')[0]
            cur_params['season'] = date_str
            cur_params['q'] = date_str.replace('-', '.')
        else:
            cur_params['season'] = str(ep_obj.scene_season)

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            cur_params['rid'] = rid
            cur_params['attrs'] = "rageid"
            to_return.append(dict(cur_params))

        if 'rid' in cur_params:
            cur_params.pop('rid')
            cur_params.pop('attrs')

        save_q = ''
        if 'q' in cur_params:
            save_q = ' ' + cur_params['q']

        # add new query strings for exceptions
        name_exceptions = list(
            set([ep_obj.show.name] +
                scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid)))
        for cur_exception in name_exceptions:
            cur_params['q'] = helpers.sanitizeSceneName(cur_exception) + save_q
            to_return.append(dict(cur_params))

        return to_return
Exemplo n.º 28
0
    def addShowToTraktLibrary(self, show_obj):
        """
        Sends a request to trakt indicating that the given show and all its episodes is part of our library.

        show_obj: The TVShow object to add to trakt
        """

        data = {}

        if not self.findShow(show_obj.indexer, show_obj.indexerid):
            # URL parameters
            data['tvdb_id'] = helpers.mapIndexersToShow(show_obj)[1]
            data['title'] = show_obj.name
            data['year'] = show_obj.startyear

        if len(data):
            logger.log(u"Adding " + show_obj.name + " to trakt.tv library", logger.DEBUG)
            TraktCall("show/library/%API%", sickbeard.TRAKT_API, sickbeard.TRAKT_USERNAME, sickbeard.TRAKT_PASSWORD,
                      data)
Exemplo n.º 29
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):
        to_return = []
        params = {}

        if not ep_obj:
            return to_return

        params['maxage'] = (
            datetime.datetime.now() - datetime.datetime.combine(
                ep_obj.airdate, datetime.datetime.min.time())).days + 1

        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate)
            params['season'] = date_str.partition('-')[0]
            params['ep'] = date_str.partition('-')[2].replace('-', '/')
        else:
            params['season'] = ep_obj.scene_season
            params['ep'] = ep_obj.scene_episode

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            params['rid'] = rid
            params['attrs'] = "rageid"
            to_return.append(dict(params))

        if 'rid' in params:
            params.pop('rid')
            params.pop('attrs')

        # add new query strings for exceptions
        name_exceptions = list(
            set([ep_obj.show.name] +
                scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid)))
        for cur_exception in name_exceptions:
            params['q'] = helpers.sanitizeSceneName(cur_exception)
            if add_string:
                params['q'] += ' ' + add_string

            to_return.append(dict(params))

        return to_return
Exemplo n.º 30
0
    def _get_season_search_strings(self, ep_obj):

        to_return = []
        cur_params = {}
        if not ep_obj:
            return to_return

        cur_params["maxage"] = (
            datetime.datetime.now() - datetime.datetime.combine(ep_obj.airdate, datetime.datetime.min.time())
        ).days + 1

        # season
        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate).split("-")[0]
            cur_params["season"] = date_str
            cur_params["q"] = date_str.replace("-", ".")
        else:
            cur_params["season"] = str(ep_obj.scene_season)

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            cur_params["rid"] = rid
            cur_params["attrs"] = "rageid"
            to_return.append(dict(cur_params))

        if "rid" in cur_params:
            cur_params.pop("rid")
            cur_params.pop("attrs")

        save_q = ""
        if "q" in cur_params:
            save_q = " " + cur_params["q"]

        # add new query strings for exceptions
        name_exceptions = list(set([ep_obj.show.name] + scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid)))
        for cur_exception in name_exceptions:
            cur_params["q"] = helpers.sanitizeSceneName(cur_exception) + save_q
            to_return.append(dict(cur_params))

        return to_return
Exemplo n.º 31
0
    def _get_episode_search_strings(self, ep_obj, add_string=""):
        to_return = []
        params = {}

        if not ep_obj:
            return to_return

        params["maxage"] = (
            datetime.datetime.now() - datetime.datetime.combine(ep_obj.airdate, datetime.datetime.min.time())
        ).days + 1

        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate)
            params["season"] = date_str.partition("-")[0]
            params["ep"] = date_str.partition("-")[2].replace("-", "/")
        else:
            params["season"] = ep_obj.scene_season
            params["ep"] = ep_obj.scene_episode

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            params["rid"] = rid
            params["attrs"] = "rageid"
            to_return.append(dict(params))

        if "rid" in params:
            params.pop("rid")
            params.pop("attrs")

        # add new query strings for exceptions
        name_exceptions = list(set([ep_obj.show.name] + scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid)))
        for cur_exception in name_exceptions:
            params["q"] = helpers.sanitizeSceneName(cur_exception)
            if add_string:
                params["q"] += " " + add_string

            to_return.append(dict(params))

        return to_return
Exemplo n.º 32
0
    def _get_season_search_strings(self, ep_obj):

        to_return = []
        cur_params = {}
        if not ep_obj:
            return to_return

        cur_params['maxage'] = (datetime.datetime.now() - datetime.datetime.combine(ep_obj.airdate, datetime.datetime.min.time())).days + 1

        # season
        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate).split('-')[0]
            cur_params['season'] = date_str
            cur_params['q'] = date_str.replace('-', '.')
        else:
            cur_params['season'] = str(ep_obj.scene_season)

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            cur_params['rid'] = rid
            cur_params['attrs'] = "rageid"
            to_return.append(dict(cur_params))

        if 'rid' in cur_params:
            cur_params.pop('rid')
            cur_params.pop('attrs')

        save_q = ''
        if 'q' in cur_params:
            save_q = ' ' + cur_params['q']

        # add new query strings for exceptions
        name_exceptions = list(
            set([ep_obj.show.name] + scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid)))
        for cur_exception in name_exceptions:
            cur_params['q'] = helpers.sanitizeSceneName(cur_exception) + save_q
            to_return.append(dict(cur_params))

        return to_return
Exemplo n.º 33
0
    def _get_episode_search_strings(self, ep_obj, add_string=''):
        to_return = []
        params = {}

        if not ep_obj:
            return to_return

        params['maxage'] = (datetime.datetime.now() - datetime.datetime.combine(ep_obj.airdate, datetime.datetime.min.time())).days + 1

        if ep_obj.show.air_by_date or ep_obj.show.sports:
            date_str = str(ep_obj.airdate)
            params['season'] = date_str.partition('-')[0]
            params['ep'] = date_str.partition('-')[2].replace('-', '/')
        else:
            params['season'] = ep_obj.scene_season
            params['ep'] = ep_obj.scene_episode

        # search
        rid = helpers.mapIndexersToShow(ep_obj.show)[2]
        if rid:
            params['rid'] = rid
            params['attrs'] = "rageid"
            to_return.append(dict(params))

        if 'rid' in params:
            params.pop('rid')
            params.pop('attrs')

        # add new query strings for exceptions
        name_exceptions = list(
            set([ep_obj.show.name] + scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid)))
        for cur_exception in name_exceptions:
            params['q'] = helpers.sanitizeSceneName(cur_exception)
            if add_string:
                params['q'] += ' ' + add_string

            to_return.append(dict(params))

        return to_return
Exemplo n.º 34
0
    def addShowToTraktLibrary(self, show_obj):
        """
        Sends a request to trakt indicating that the given show and all its episodes is part of our library.

        show_obj: The TVShow object to add to trakt
        """

        data = {}

        if not self.findShow(show_obj.indexer, show_obj.indexerid):
            # URL parameters
            data['tvdb_id'] = helpers.mapIndexersToShow(show_obj)[1]
            data['title'] = show_obj.name
            data['year'] = show_obj.startyear

        if len(data):
            logger.log(u"Adding " + show_obj.name + " to trakt.tv library", logger.DEBUG)

            try:
                self.trakt_api.traktRequest("show/library/%APIKEY%", data, method='POST')
            except (traktException, traktAuthException, traktServerBusy) as e:
                logger.log(u"Could not connect to Trakt service: %s" % ex(e), logger.WARNING)
                return
Exemplo n.º 35
0
    def _episode_strings(self, ep_obj):

        search_params = []
        base_params = {}

        if not ep_obj:
            return [base_params]

        if ep_obj.show.air_by_date or ep_obj.show.is_sports:
            date_str = str(ep_obj.airdate)
            base_params["season"] = date_str.partition("-")[0]
            base_params["ep"] = date_str.partition("-")[2].replace("-", "/")
        elif ep_obj.show.is_anime:
            base_params["ep"] = "%i" % int(
                ep_obj.scene_absolute_number if int(ep_obj.scene_absolute_number) > 0 else ep_obj.scene_episode
            )
        else:
            base_params["season"], base_params["ep"] = (
                (ep_obj.season, ep_obj.episode),
                (ep_obj.scene_season, ep_obj.scene_episode),
            )[ep_obj.show.is_scene]

        # search
        ids = helpers.mapIndexersToShow(ep_obj.show)
        if ids[1]:  # or ids[2]:
            params = base_params.copy()
            use_id = False
            if ids[1]:
                if self.supports_tvdbid():
                    params["tvdbid"] = ids[1]
                use_id = True
            if ids[2]:
                params["rid"] = ids[2]
                use_id = True
            use_id and search_params.append(params)

        # add new query strings for exceptions
        name_exceptions = list(
            set(
                [
                    helpers.sanitizeSceneName(a)
                    for a in scene_exceptions.get_scene_exceptions(ep_obj.show.indexerid) + [ep_obj.show.name]
                ]
            )
        )

        for cur_exception in name_exceptions:
            params = base_params.copy()
            params["q"] = cur_exception
            search_params.append(params)

            if ep_obj.show.is_anime:
                # Experimental, add a search string without search explicitly for the episode!
                # Remove the ?ep=e46 parameter and use the episode number to the query parameter.
                # Can be useful for newznab indexers that do not have the episodes 100% parsed.
                # Start with only applying the search string to anime shows
                params = base_params.copy()
                params["q"] = "%s.%02d" % (cur_exception, int(params["ep"]))
                if "ep" in params:
                    params.pop("ep")
                search_params.append(params)

        return [{"Episode": search_params}]
Exemplo n.º 36
0
    def updateWantedList(self, indexer_id=None):

        if not sickbeard.USE_TRAKT:
            logger.log(u"Trakt integrazione disabled, quit", logger.DEBUG)
            return

        num_of_download = sickbeard.TRAKT_NUM_EP

        #if num_of_download == 0 or self.EpisodeWatched == 'NULL':
        if self.EpisodeWatched == 'NULL':
            return True

        logger.log(
            u"Start looking if having " + str(num_of_download) +
            " episode not watched", logger.DEBUG)

        myDB = db.DBConnection()

        sql_selection = "SELECT indexer,show_name, indexer_id, season, episode, paused FROM (SELECT * FROM tv_shows s,tv_episodes e WHERE s.indexer_id = e.showid) T1 WHERE T1.episode_id IN (SELECT T2.episode_id FROM tv_episodes T2 WHERE T2.showid = T1.indexer_id and T2.status in (?,?) and T2.season!=0 and airdate is not null ORDER BY T2.season,T2.episode LIMIT 1)"

        if indexer_id is not None:
            sql_selection = sql_selection + " and indexer_id = " + str(
                indexer_id)
        else:
            sql_selection = sql_selection + " and T1.paused = 0"

        sql_selection = sql_selection + " ORDER BY T1.show_name,season,episode"

        results = myDB.select(sql_selection, [SKIPPED, DOWNLOADABLE])

        for cur_result in results:

            indexer_id = str(cur_result["indexer_id"])
            show_name = (cur_result["show_name"])
            sn_sb = cur_result["season"]
            ep_sb = cur_result["episode"]

            newShow = helpers.findCertainShow(sickbeard.showList,
                                              int(indexer_id))
            tvdb_id = str(helpers.mapIndexersToShow(newShow)[1])

            num_of_ep = 0
            season = 1
            episode = 0

            last_per_season = TraktCall(
                "show/seasons.json/%API%/" + str(tvdb_id), sickbeard.TRAKT_API,
                sickbeard.TRAKT_USERNAME, sickbeard.TRAKT_PASSWORD)
            if not last_per_season:
                logger.log(
                    u"Could not connect to trakt service, cannot download last season for show",
                    logger.ERROR)
                return False

            logger.log(
                u"indexer_id: " + str(indexer_id) + ", Show: " + show_name +
                " - First skipped Episode: Season " + str(sn_sb) +
                ", Episode " + str(ep_sb), logger.DEBUG)

            if tvdb_id not in (show["tvdb_id"]
                               for show in self.EpisodeWatched):
                logger.log(u"Show not founded in Watched list", logger.DEBUG)
                if (sn_sb * 100 + ep_sb) > 100 + num_of_download:
                    logger.log(
                        u"First " + str(num_of_download) +
                        " episode already downloaded", logger.DEBUG)
                    continue
                else:
                    sn_sb = 1
                    ep_sb = 1
                    num_of_ep = num_of_download
            else:
                logger.log(u"Show founded in Watched list", logger.DEBUG)

                show_watched = [
                    show for show in self.EpisodeWatched
                    if show["tvdb_id"] == tvdb_id
                ]

                season = show_watched[0]['seasons'][0]['season']
                episode = show_watched[0]['seasons'][0]['episodes'][-1]
                logger.log(
                    u"Last watched, Season: " + str(season) + " - Episode: " +
                    str(episode), logger.DEBUG)

                num_of_ep = num_of_download - (self._num_ep_for_season(
                    last_per_season, sn_sb, ep_sb) - self._num_ep_for_season(
                        last_per_season, season, episode)) + 1

            logger.log(u"Number of Episode to Download: " + str(num_of_ep),
                       logger.DEBUG)

            s = sn_sb
            e = ep_sb

            wanted = False

            for x in range(0, num_of_ep):

                logger.log(u"s: " + str(s) + ", e: " + str(e), logger.DEBUG)
                last_s = [
                    last_x_s for last_x_s in last_per_season
                    if last_x_s['season'] == s
                ]
                if last_s is None:
                    break
                if episode == 0 or (s * 100 +
                                    e) <= (int(last_s[0]['season']) * 100 +
                                           int(last_s[0]['episodes'])):

                    if (s * 100 + e) > (season * 100 + episode):
                        if not cur_result["paused"]:
                            if newShow is not None:
                                self.setEpisodeToWanted(newShow, s, e)
                                if not self.episode_in_watchlist(
                                        newShow, s, e):
                                    if not self.update_watchlist(
                                            "episode", "add", newShow, s, e):
                                        return False
                                wanted = True
                            else:
                                self.todoWanted.append(int(indexer_id), s, e)
                    else:
                        self.setEpisodeToIgnored(newShow, s, e)
                        if self.episode_in_watchlist(newShow, s, e):
                            if not self.update_watchlist(
                                    "episode", "remove", newShow, s, e):
                                return False
                    e = e + 1

                if (s * 100 + e) == (int(last_s[0]['season']) * 100 +
                                     int(last_s[0]['episodes'])):
                    s = s + 1
                    e = 1

            if wanted:
                self.startBacklog(newShow)
        logger.log(
            u"Stop looking if having " + str(num_of_download) +
            " episode not watched", logger.DEBUG)
        return True
Exemplo n.º 37
0
    def update_watchlist(self, type, update, show_obj, s, e):

        if type == "episode":
            # traktv URL parameters
            data = {
                'tvdb_id': helpers.mapIndexersToShow(show_obj)[1],
                'episodes': [{
                    'season': s,
                    'episode': e
                }]
            }
            if update == "add" and sickbeard.TRAKT_REMOVE_WATCHLIST:
                result = TraktCall("show/episode/watchlist/%API%",
                                   sickbeard.TRAKT_API,
                                   sickbeard.TRAKT_USERNAME,
                                   sickbeard.TRAKT_PASSWORD, data)
                if not result:
                    logger.log(
                        u"Could not connect to trakt service, aborting add of episode to watchlist",
                        logger.ERROR)
                return

            elif update == "remove" and sickbeard.TRAKT_REMOVE_WATCHLIST:
                result = TraktCall("show/episode/unwatchlist/%API%",
                                   sickbeard.TRAKT_API,
                                   sickbeard.TRAKT_USERNAME,
                                   sickbeard.TRAKT_PASSWORD, data)
                if not result:
                    logger.log(
                        u"Could not connect to trakt service, aborting remove of episode form watchlist",
                        logger.ERROR)
                return
            self._getEpisodeWatchlist()
        elif type == "show":
            # traktv URL parameters
            data = {
                'shows': [{
                    'tvdb_id': helpers.mapIndexersToShow(show_obj)[1]
                }]
            }
            if update == "add" and sickbeard.TRAKT_REMOVE_SHOW_WATCHLIST:
                result = TraktCall("show/watchlist/%API%", sickbeard.TRAKT_API,
                                   sickbeard.TRAKT_USERNAME,
                                   sickbeard.TRAKT_PASSWORD, data)
                if not result:
                    logger.log(
                        u"Could not connect to trakt service, aborting add of show to watchlist",
                        logger.ERROR)
                return
            elif update == "remove" and sickbeard.TRAKT_REMOVE_SHOW_WATCHLIST:
                result = TraktCall("show/unwatchlist/%API%",
                                   sickbeard.TRAKT_API,
                                   sickbeard.TRAKT_USERNAME,
                                   sickbeard.TRAKT_PASSWORD, data)
                if not result:
                    logger.log(
                        u"Could not connect to trakt service, aborting remove of show form watchlist",
                        logger.ERROR)
                return
            self._getShowWatchlist()
        else:
            logger.log(
                u"Error invoking update_watchlist procedure, check parameter",
                logger.ERROR)
            return False

        return True