From 7e800ff5242cc980e9044f8ccb108bd146ae1322 Mon Sep 17 00:00:00 2001 From: echel0n Date: Wed, 30 Apr 2014 18:20:53 -0700 Subject: [PATCH] Fixed manual episode searches. Corrected a issue where SB was being searched twice for the same show wasting cpu cycles. --- sickbeard/name_parser/parser.py | 5 +++ sickbeard/providers/generic.py | 66 +++++++++++++++++++-------------- sickbeard/tvcache.py | 20 ++++------ 3 files changed, 50 insertions(+), 41 deletions(-) diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py index 2947b3d6..86a98681 100644 --- a/sickbeard/name_parser/parser.py +++ b/sickbeard/name_parser/parser.py @@ -280,8 +280,11 @@ class ParseResult(object): extra_info=None, release_group=None, air_date=None, + show=None, ): + self.show = show + self.original_name = original_name self.series_name = series_name @@ -360,6 +363,8 @@ class ParseResult(object): # convert scene numbered releases before storing to cache showObj = helpers.get_show_by_name(self.series_name) if showObj: + self.show = showObj + new_episode_numbers = [] new_season_numbers = [] for epNo in self.episode_numbers: diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py index 38b31754..23283f43 100644 --- a/sickbeard/providers/generic.py +++ b/sickbeard/providers/generic.py @@ -249,11 +249,15 @@ class GenericProvider: def getSearchResults(self, show, season, ep_objs, seasonSearch=False, manualSearch=False): + self._checkAuth() + self.show = show + itemList = [] results = {} - self._checkAuth() - self.show = show + useDate = False + if self.show.air_by_date or self.show.sports: + useDate = True regexMode = 0 if self.show.sports: @@ -283,7 +287,8 @@ class GenericProvider: logger.log(u"Unable to parse the filename " + title + " into a valid episode", logger.WARNING) continue - if not (self.show.air_by_date, self.show.sports): + + if not useDate: # this check is meaningless for non-season searches if (parse_result.season_number is not None and parse_result.season_number != season) or ( parse_result.season_number is None and season != 1): @@ -291,41 +296,46 @@ class GenericProvider: season) + ", ignoring", logger.DEBUG) continue + if manualSearch and (parse_result.season_number != season or ep_objs[0].episode not in parse_result.episode_numbers): + logger.log(u"Episode " + title + " isn't " + str(season) + "x" + str( + ep_objs[0].episode) + ", skipping it", logger.DEBUG) + continue + # we just use the existing info for normal searches - actual_season = parse_result.season_number - actual_episodes = parse_result.episode_numbers - + actual_season = season if manualSearch else parse_result.season_number + actual_episodes = [ep_objs[0].episode] if manualSearch else parse_result.episode_numbers else: - if self.show.air_by_date and not parse_result.air_by_date: + if not (parse_result.air_by_date,parse_result.sports_event_date): logger.log( - u"This is supposed to be an air-by-date search but the result " + title + " didn't parse as one, skipping it", + u"This is supposed to be an date search but the result " + title + " didn't parse as one, skipping it", logger.DEBUG) continue - if self.show.sports and not parse_result.sports_event_date: - logger.log( - u"This is supposed to be an sports-event-date search but the result " + title + " didn't parse as one, skipping it", - logger.DEBUG) + if manualSearch and parse_result.air_date != ep_objs[0].airdate: + logger.log(u"Episode " + title + " didn't air on " + str(ep_objs[0].airdate) + ", skipping it", + logger.DEBUG) continue - myDB = db.DBConnection() - if parse_result.air_by_date: - sql_results = myDB.select( - "SELECT season, episode FROM tv_episodes WHERE showid = ? AND airdate = ?", - [self.show.indexerid, parse_result.air_date.toordinal()]) - elif parse_result.sports: - sql_results = myDB.select( - "SELECT season, episode FROM tv_episodes WHERE showid = ? AND airdate = ?", - [self.show.indexerid, parse_result.sports_event_date.toordinal()]) + if not manualSearch: + myDB = db.DBConnection() + if parse_result.air_by_date: + sql_results = myDB.select( + "SELECT season, episode FROM tv_episodes WHERE showid = ? AND airdate = ?", + [self.show.indexerid, parse_result.air_date.toordinal()]) + elif parse_result.sports: + sql_results = myDB.select( + "SELECT season, episode FROM tv_episodes WHERE showid = ? AND airdate = ?", + [self.show.indexerid, parse_result.sports_event_date.toordinal()]) - if len(sql_results) != 1: - logger.log( - u"Tried to look up the date for the episode " + title + " but the database didn't give proper results, skipping it", - logger.WARNING) - continue + if len(sql_results) != 1: + logger.log( + u"Tried to look up the date for the episode " + title + " but the database didn't give proper results, skipping it", + logger.WARNING) + continue + + actual_season = season if manualSearch else int(sql_results[0]["season"]) + actual_episodes = [ep_objs[0].episode] if manualSearch else [int(sql_results[0]["episode"])] - actual_season = int(sql_results[0]["season"]) - actual_episodes = [int(sql_results[0]["episode"])] # make sure we want the episode wantEp = True diff --git a/sickbeard/tvcache.py b/sickbeard/tvcache.py index e17badf0..7c4fb546 100644 --- a/sickbeard/tvcache.py +++ b/sickbeard/tvcache.py @@ -198,7 +198,7 @@ class TVCache(): # if we don't have complete info then parse the filename to get it try: - myParser = NameParser() + myParser = NameParser(0) parse_result = myParser.parse(name).convert() except InvalidNameException: logger.log(u"Unable to parse the filename " + name + " into a valid episode", logger.DEBUG) @@ -212,22 +212,16 @@ class TVCache(): logger.log(u"No series name retrieved from " + name + ", unable to cache it", logger.DEBUG) return None - try: - showObj = helpers.get_show_by_name(parse_result.series_name) - if showObj is None: - return None + if not parse_result.show: + logger.log(u"Couldn't find a show in our databases from " + name + ", unable to cache it", logger.DEBUG) + return None + try: myDB = db.DBConnection() if showObj.air_by_date: + airdate = parse_result.sports_event_date.toordinal() if showObj.sports else parse_result.air_date.toordinal() sql_results = myDB.select("SELECT season, episode FROM tv_episodes WHERE showid = ? AND airdate = ?", - [showObj.indexerid, parse_result.air_date.toordinal()]) - if sql_results > 0: - season = int(sql_results[0]["season"]) - episodes = [int(sql_results[0]["episode"])] - elif showObj.sports: - sql_results = myDB.select("SELECT season, episode FROM tv_episodes WHERE showid = ? AND airdate = ?", - [showObj.indexerid, parse_result.sports_event_date.toordinal()]) - + [showObj.indexerid, airdate]) if sql_results > 0: season = int(sql_results[0]["season"]) episodes = [int(sql_results[0]["episode"])]