Skip to content

Commit

Permalink
Avoid reprocess same PROPER over and over
Browse files Browse the repository at this point in the history
  • Loading branch information
fernandog committed Jul 28, 2016
1 parent c654d61 commit ad4b5b4
Showing 1 changed file with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions sickbeard/properFinder.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
class ProperFinder(object): # pylint: disable=too-few-public-methods
def __init__(self):
self.amActive = False
self.processed_propers = []

def run(self, force=False): # pylint: disable=unused-argument
"""
Expand Down Expand Up @@ -169,7 +170,15 @@ def _get_proper_results(self): # pylint: disable=too-many-locals, too-many-bran
sorted_propers = sorted(propers.values(), key=operator.attrgetter('date'), reverse=True)
final_propers = []

# Keep only last 100 items of processed propers:
self.processed_propers = self.processed_propers[-100:]

for cur_proper in sorted_propers:

if cur_proper.name in self.processed_propers:
logger.log(u'Proper already processed. Skipping: {0}'.format(cur_proper.name), logger.DEBUG)
continue

try:
parse_result = NameParser(False).parse(cur_proper.name)
except (InvalidNameException, InvalidShowException) as error:
Expand All @@ -186,11 +195,13 @@ def _get_proper_results(self): # pylint: disable=too-many-locals, too-many-bran
if not parse_result.series_name:
logger.log('Ignoring invalid show: {name}'.format
(name=cur_proper.name), logger.DEBUG)
self.processed_propers.append(cur_proper.name)
continue

if not parse_result.episode_numbers:
logger.log('Ignoring full season instead of episode: {name}'.format
(name=cur_proper.name), logger.DEBUG)
self.processed_propers.append(cur_proper.name)
continue

logger.log('Successful match! Matched {original_name} to show {new_name}'.format
Expand All @@ -217,13 +228,15 @@ def _get_proper_results(self): # pylint: disable=too-many-locals, too-many-bran
if not best_result:
logger.log('Rejected proper due to release filters: {name}'.format
(name=cur_proper.name))
self.processed_propers.append(cur_proper.name)
continue

# only get anime proper if it has release group and version
if best_result.show.is_anime:
if not best_result.release_group and best_result.version == -1:
logger.log('Ignoring proper without release group and version: {name}'.format
(name=best_result.name))
self.processed_propers.append(cur_proper.name)
continue

# check if we actually want this proper (if it's the right quality)
Expand All @@ -233,13 +246,15 @@ def _get_proper_results(self): # pylint: disable=too-many-locals, too-many-bran
if not sql_results:
logger.log('Ignoring proper with incorrect quality: {name}'.format
(name=best_result.name))
self.processed_propers.append(cur_proper.name)
continue

# only keep the proper if we have already retrieved the same quality ep (don't get better/worse ones)
old_status, old_quality = Quality.splitCompositeStatus(int(sql_results[0][b'status']))
if old_status not in (DOWNLOADED, SNATCHED) or old_quality != best_result.quality:
logger.log('Ignoring proper because quality is different or episode is already archived: {name}'.format
(name=best_result.name))
self.processed_propers.append(cur_proper.name)
continue

# check if we actually want this proper (if it's the right release group and a higher version)
Expand All @@ -258,11 +273,13 @@ def _get_proper_results(self): # pylint: disable=too-many-locals, too-many-bran
else:
logger.log('Ignoring proper with the same or lower version: {name}'.format
(name=best_result.name))
self.processed_propers.append(cur_proper.name)
continue

if old_release_group != best_result.release_group:
logger.log('Ignoring proper from release group {new} instead of current group {old}'.format
(new=best_result.release_group, old=old_release_group))
self.processed_propers.append(cur_proper.name)
continue

# if the show is in our list and there hasn't been a proper already added for that particular episode then add it to our list of propers
Expand All @@ -271,6 +288,8 @@ def _get_proper_results(self): # pylint: disable=too-many-locals, too-many-bran
logger.log('Found a desired proper: {name}'.format(name=best_result.name))
final_propers.append(best_result)

self.processed_propers.append(cur_proper.name)

return final_propers

def _downloadPropers(self, proper_list):
Expand Down

0 comments on commit ad4b5b4

Please sign in to comment.