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
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
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
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)
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
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
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
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
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)
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}]
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)
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]
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)
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
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
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]
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]
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
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
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
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]
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
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}]
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}]
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)
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
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
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
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
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
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
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}]
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
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