diff --git a/couchpotato/core/plugins/score/main.py b/couchpotato/core/plugins/score/main.py index 28baae7..cc87c9a 100644 --- a/couchpotato/core/plugins/score/main.py +++ b/couchpotato/core/plugins/score/main.py @@ -1,11 +1,12 @@ from couchpotato.core.event import addEvent from couchpotato.core.helpers.encoding import toUnicode -from couchpotato.core.helpers.variable import getTitle +from couchpotato.core.helpers.variable import getTitle, splitString from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin -from couchpotato.core.plugins.score.scores import nameScore, CatnameScore, nameRatioScore, \ - sizeScore, providerScore, duplicateScore, partialIgnoredScore, CatpartialIgnoredScore, namePositionScore, \ +from couchpotato.core.plugins.score.scores import nameScore, nameRatioScore, \ + sizeScore, providerScore, duplicateScore, partialIgnoredScore, namePositionScore, \ halfMultipartScore +from couchpotato.environment import Env log = CPLog(__name__) @@ -18,10 +19,12 @@ class Score(Plugin): def calculate(self, nzb, movie): ''' Calculate the score of a NZB, used for sorting later ''' - if movie and movie['category'] and movie['category']['preferred']: - score = CatnameScore(toUnicode(nzb['name']), movie['library']['year'], movie['category']['preferred']) - else: - score = nameScore(toUnicode(nzb['name']), movie['library']['year']) + # Merge global and category + preferred_words = splitString(Env.setting('preferred_words', section = 'searcher').lower()) + try: preferred_words = list(set(preferred_words + splitString(movie['category']['preferred'].lower()))) + except: pass + + score = nameScore(toUnicode(nzb['name']), movie['library']['year'], preferred_words) for movie_title in movie['library']['titles']: score += nameRatioScore(toUnicode(nzb['name']), toUnicode(movie_title['title'])) @@ -43,11 +46,13 @@ class Score(Plugin): # Duplicates in name score += duplicateScore(nzb['name'], getTitle(movie['library'])) + # Merge global and category + ignored_words = splitString(Env.setting('ignored_words', section = 'searcher').lower()) + try: ignored_words = list(set(ignored_words + splitString(movie['category']['ignored'].lower()))) + except: pass + # Partial ignored words - if movie and movie['category'] and movie['category']['ignored']: - score = CatpartialIgnoredScore(nzb['name'], getTitle(movie['library']), movie['category']['ignored']) - else: - score += partialIgnoredScore(nzb['name'], getTitle(movie['library'])) + score += partialIgnoredScore(nzb['name'], getTitle(movie['library']), ignored_words) # Ignore single downloads from multipart score += halfMultipartScore(nzb['name']) diff --git a/couchpotato/core/plugins/score/scores.py b/couchpotato/core/plugins/score/scores.py index 5af07fa..4d966eb 100644 --- a/couchpotato/core/plugins/score/scores.py +++ b/couchpotato/core/plugins/score/scores.py @@ -23,7 +23,7 @@ name_scores = [ ] -def nameScore(name, year): +def nameScore(name, year, preferred_words): ''' Calculate score for words in the NZB name ''' score = 0 @@ -42,38 +42,10 @@ def nameScore(name, year): # Contains preferred word nzb_words = re.split('\W+', simplifyString(name)) - preferred_words = splitString(Env.setting('preferred_words', section = 'searcher')) score += 100 * len(list(set(nzb_words) & set(preferred_words))) return score -def CatnameScore(name, year, preferred): - ''' Calculate score for words in the NZB name ''' - - score = 0 - name = name.lower() - - # give points for the cool stuff - for value in name_scores: - v = value.split(':') - add = int(v.pop()) - if v.pop() in name: - score = score + add - - # points if the year is correct - if str(year) in name: - score = score + 5 - - # Contains preferred word - nzb_words = re.split('\W+', simplifyString(name)) - preferred_words = [x.strip() for x in preferred.split(',')] - for word in preferred_words: - if word.strip() and word.strip().lower() in nzb_words: - score = score + 100 - - return score - - def nameRatioScore(nzb_name, movie_name): nzb_words = re.split('\W+', fireEvent('scanner.create_file_identifier', nzb_name, single = True)) movie_words = re.split('\W+', simplifyString(movie_name)) @@ -160,13 +132,11 @@ def duplicateScore(nzb_name, movie_name): return len(list(set(duplicates) - set(movie_words))) * -4 -def partialIgnoredScore(nzb_name, movie_name): +def partialIgnoredScore(nzb_name, movie_name, ignored_words): nzb_name = nzb_name.lower() movie_name = movie_name.lower() - ignored_words = [x.strip().lower() for x in Env.setting('ignored_words', section = 'searcher').split(',')] - score = 0 for ignored_word in ignored_words: if ignored_word in nzb_name and ignored_word not in movie_name: @@ -174,19 +144,6 @@ def partialIgnoredScore(nzb_name, movie_name): return score -def CatpartialIgnoredScore(nzb_name, movie_name, ignored): - - nzb_name = nzb_name.lower() - movie_name = movie_name.lower() - - ignored_words = [x.strip().lower() for x in ignored.split(',')] - - score = 0 - for ignored_word in ignored_words: - if ignored_word in nzb_name and ignored_word not in movie_name: - score -= 5 - - return score def halfMultipartScore(nzb_name): diff --git a/couchpotato/core/plugins/searcher/main.py b/couchpotato/core/plugins/searcher/main.py index 759ac38..dfb6ccb 100644 --- a/couchpotato/core/plugins/searcher/main.py +++ b/couchpotato/core/plugins/searcher/main.py @@ -105,6 +105,7 @@ class Searcher(Plugin): for movie in movies: movie_dict = movie.to_dict({ + 'category': {}, 'profile': {'types': {'quality': {}}}, 'releases': {'status': {}, 'quality': {}}, 'library': {'titles': {}, 'files':{}}, @@ -392,10 +393,10 @@ class Searcher(Plugin): nzb_words = re.split('\W+', nzb_name) # Make sure it has required words - try: - required_words = splitString(movie['category']['required'].lower()) - except: - required_words = splitString(self.conf('required_words').lower()) + required_words = splitString(self.conf('required_words').lower()) + try: required_words = list(set(required_words + splitString(movie['category']['required'].lower()))) + except: pass + req_match = 0 for req_set in required_words: req = splitString(req_set, '&') @@ -406,10 +407,10 @@ class Searcher(Plugin): return False # Ignore releases - try: - ignored_words = splitString(movie['category']['ignored'].lower()) - except: - ignored_words = splitString(self.conf('ignored_words').lower()) + ignored_words = splitString(self.conf('ignored_words').lower()) + try: ignored_words = list(set(ignored_words + splitString(movie['category']['ignored'].lower()))) + except: pass + ignored_match = 0 for ignored_set in ignored_words: ignored = splitString(ignored_set, '&')