From c7ce18f8c274f055de864d9e6b4673d56592b50f Mon Sep 17 00:00:00 2001 From: Ruud Date: Fri, 10 Oct 2014 15:13:58 +0200 Subject: [PATCH 1/4] Better error message for missing cd number --- couchpotato/core/plugins/renamer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/couchpotato/core/plugins/renamer.py b/couchpotato/core/plugins/renamer.py index d6deba6b..94e1002c 100755 --- a/couchpotato/core/plugins/renamer.py +++ b/couchpotato/core/plugins/renamer.py @@ -222,8 +222,8 @@ class Renamer(Plugin): cd_keys = ['','', ''] if not any(x in folder_name for x in cd_keys) and not any(x in file_name for x in cd_keys): - log.error('Missing `cd` or `cd_nr` in the renamer. This will cause multi-file releases of being renamed to the same file.' - 'Force adding it') + log.error('Missing `cd` or `cd_nr` in the renamer. This will cause multi-file releases of being renamed to the same file. ' + 'Please add it in the renamer settings. Force adding it for now.') file_name = '%s %s' % ('', file_name) # Tag release folder as failed_rename in case no groups were found. This prevents check_snatched from removing the release from the downloader. From ca131073300d2daad9609e9ca883b6131b692026 Mon Sep 17 00:00:00 2001 From: Ruud Date: Fri, 10 Oct 2014 22:46:35 +0200 Subject: [PATCH 2/4] Ignore exceptions on removing db_backup stuff --- couchpotato/runner.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/couchpotato/runner.py b/couchpotato/runner.py index 36fc366f..b7803976 100644 --- a/couchpotato/runner.py +++ b/couchpotato/runner.py @@ -116,7 +116,8 @@ def runCouchPotato(options, base_path, args, data_dir = None, log_dir = None, En # Delete non zip files if len(ints) != 1: - os.remove(os.path.join(root, backup_file)) + try: os.remove(os.path.join(root, backup_file)) + except: pass else: existing_backups.append((int(ints[0]), backup_file)) else: From b616af3a8397c38bbc101df72c5db5a177113bc8 Mon Sep 17 00:00:00 2001 From: Ruud Date: Fri, 10 Oct 2014 23:16:58 +0200 Subject: [PATCH 3/4] Make minimum scoring editable fix #4042 --- couchpotato/core/media/movie/searcher.py | 3 ++- couchpotato/core/plugins/profile/main.py | 2 ++ couchpotato/core/plugins/profile/static/profile.css | 5 +++++ couchpotato/core/plugins/profile/static/profile.js | 12 +++++++++++- couchpotato/core/plugins/release/main.py | 4 ++-- 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/couchpotato/core/media/movie/searcher.py b/couchpotato/core/media/movie/searcher.py index e44e8e6d..3c26386d 100755 --- a/couchpotato/core/media/movie/searcher.py +++ b/couchpotato/core/media/movie/searcher.py @@ -166,7 +166,8 @@ class MovieSearcher(SearcherBase, MovieTypeBase): 'quality': q_identifier, 'finish': profile['finish'][index], 'wait_for': tryInt(profile['wait_for'][index]), - '3d': profile['3d'][index] if profile.get('3d') else False + '3d': profile['3d'][index] if profile.get('3d') else False, + 'minimum_score': profile.get('minimum_score', 1), } could_not_be_released = not self.couldBeReleased(q_identifier in pre_releases, release_dates, movie['info']['year']) diff --git a/couchpotato/core/plugins/profile/main.py b/couchpotato/core/plugins/profile/main.py index 489c34dd..29bd6cbe 100644 --- a/couchpotato/core/plugins/profile/main.py +++ b/couchpotato/core/plugins/profile/main.py @@ -86,6 +86,7 @@ class ProfilePlugin(Plugin): 'label': toUnicode(kwargs.get('label')), 'order': tryInt(kwargs.get('order', 999)), 'core': kwargs.get('core', False), + 'minimum_score': tryInt(kwargs.get('minimum_score', 1)), 'qualities': [], 'wait_for': [], 'stop_after': [], @@ -217,6 +218,7 @@ class ProfilePlugin(Plugin): 'label': toUnicode(profile.get('label')), 'order': order, 'qualities': profile.get('qualities'), + 'minimum_score': 1, 'finish': [], 'wait_for': [], 'stop_after': [], diff --git a/couchpotato/core/plugins/profile/static/profile.css b/couchpotato/core/plugins/profile/static/profile.css index edab8312..df93944e 100644 --- a/couchpotato/core/plugins/profile/static/profile.css +++ b/couchpotato/core/plugins/profile/static/profile.css @@ -51,6 +51,11 @@ margin: 0 5px !important; } + .profile .wait_for .minimum_score_input { + width: 40px !important; + text-align: left; + } + .profile .types { padding: 0; margin: 0 20px 0 -4px; diff --git a/couchpotato/core/plugins/profile/static/profile.js b/couchpotato/core/plugins/profile/static/profile.js index 89f1a697..35ad81b9 100644 --- a/couchpotato/core/plugins/profile/static/profile.js +++ b/couchpotato/core/plugins/profile/static/profile.js @@ -53,12 +53,21 @@ var Profile = new Class({ }), new Element('span', {'text':'day(s) for a better quality '}), new Element('span.advanced', {'text':'and keep searching'}), + // "After a checked quality is found and downloaded, continue searching for even better quality releases for the entered number of days." new Element('input.inlay.xsmall.stop_after_input.advanced', { 'type':'text', 'value': data.stop_after && data.stop_after.length > 0 ? data.stop_after[0] : 0 }), - new Element('span.advanced', {'text':'day(s) for a better (checked) quality.'}) + new Element('span.advanced', {'text':'day(s) for a better (checked) quality.'}), + + // Minimum score of + new Element('span.advanced', {'html':'
Releases need a minimum score of'}), + new Element('input.advanced.inlay.xsmall.minimum_score_input', { + 'size': 4, + 'type':'text', + 'value': data.minimum_score || 1 + }) ) ); @@ -126,6 +135,7 @@ var Profile = new Class({ 'label' : self.el.getElement('.quality_label input').get('value'), 'wait_for' : self.el.getElement('.wait_for_input').get('value'), 'stop_after' : self.el.getElement('.stop_after_input').get('value'), + 'minimum_score' : self.el.getElement('.minimum_score_input').get('value'), 'types': [] }; diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index 452aa751..375547c3 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -389,8 +389,8 @@ class Release(Plugin): log.info('Ignored: %s', rel['name']) continue - if rel['score'] <= 0: - log.info('Ignored, score "%s" to low: %s', (rel['score'], rel['name'])) + if rel['score'] < quality_custom.get('minimum_score'): + log.info('Ignored, score "%s" to low, need at least "%s": %s', (rel['score'], quality_custom.get('minimum_score'), rel['name'])) continue if rel['size'] <= 50: From 65f0dc25d2dbb103a2ae4179a1bc28919cd26ad2 Mon Sep 17 00:00:00 2001 From: Ruud Date: Sat, 11 Oct 2014 14:32:12 +0200 Subject: [PATCH 4/4] Allow 1080p in shitty quality releases --- couchpotato/core/plugins/quality/main.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/couchpotato/core/plugins/quality/main.py b/couchpotato/core/plugins/quality/main.py index f3fbefef..96fb1a3a 100644 --- a/couchpotato/core/plugins/quality/main.py +++ b/couchpotato/core/plugins/quality/main.py @@ -30,10 +30,10 @@ class QualityPlugin(Plugin): {'identifier': 'dvdr', 'size': (3000, 10000), 'median_size': 4500, 'label': 'DVD-R', 'alternative': ['br2dvd', ('dvd', 'r')], 'allow': [], 'ext':['iso', 'img', 'vob'], 'tags': ['pal', 'ntsc', 'video_ts', 'audio_ts', ('dvd', 'r'), 'dvd9']}, {'identifier': 'dvdrip', 'size': (600, 2400), 'median_size': 1500, 'label': 'DVD-Rip', 'width': 720, 'alternative': [('dvd', 'rip')], 'allow': [], 'ext':['avi'], 'tags': [('dvd', 'rip'), ('dvd', 'xvid'), ('dvd', 'divx')]}, {'identifier': 'scr', 'size': (600, 1600), 'median_size': 700, 'label': 'Screener', 'alternative': ['screener', 'dvdscr', 'ppvrip', 'dvdscreener', 'hdscr', 'webrip', ('web', 'rip')], 'allow': ['dvdr', 'dvdrip', '720p', '1080p'], 'ext':[], 'tags': []}, - {'identifier': 'r5', 'size': (600, 1000), 'median_size': 700, 'label': 'R5', 'alternative': ['r6'], 'allow': ['dvdr', '720p'], 'ext':[]}, - {'identifier': 'tc', 'size': (600, 1000), 'median_size': 700, 'label': 'TeleCine', 'alternative': ['telecine'], 'allow': ['720p'], 'ext':[]}, - {'identifier': 'ts', 'size': (600, 1000), 'median_size': 700, 'label': 'TeleSync', 'alternative': ['telesync', 'hdts'], 'allow': ['720p'], 'ext':[]}, - {'identifier': 'cam', 'size': (600, 1000), 'median_size': 700, 'label': 'Cam', 'alternative': ['camrip', 'hdcam'], 'allow': ['720p'], 'ext':[]} + {'identifier': 'r5', 'size': (600, 1000), 'median_size': 700, 'label': 'R5', 'alternative': ['r6'], 'allow': ['dvdr', '720p', '1080p'], 'ext':[]}, + {'identifier': 'tc', 'size': (600, 1000), 'median_size': 700, 'label': 'TeleCine', 'alternative': ['telecine'], 'allow': ['720p', '1080p'], 'ext':[]}, + {'identifier': 'ts', 'size': (600, 1000), 'median_size': 700, 'label': 'TeleSync', 'alternative': ['telesync', 'hdts'], 'allow': ['720p', '1080p'], 'ext':[]}, + {'identifier': 'cam', 'size': (600, 1000), 'median_size': 700, 'label': 'Cam', 'alternative': ['camrip', 'hdcam'], 'allow': ['720p', '1080p'], 'ext':[]} ] pre_releases = ['cam', 'ts', 'tc', 'r5', 'scr'] threed_tags = { @@ -278,6 +278,8 @@ class QualityPlugin(Plugin): 'ext': 5, } + scored_on = [] + # Check alt and tags for tag_type in ['identifier', 'alternative', 'tags', 'label']: qualities = quality.get(tag_type, []) @@ -289,10 +291,13 @@ class QualityPlugin(Plugin): log.debug('Found %s via %s %s in %s', (quality['identifier'], tag_type, quality.get(tag_type), cur_file)) score += points.get(tag_type) - if isinstance(alt, (str, unicode)) and ss(alt.lower()) in words: + if isinstance(alt, (str, unicode)) and ss(alt.lower()) in words and ss(alt.lower()) not in scored_on: log.debug('Found %s via %s %s in %s', (quality['identifier'], tag_type, quality.get(tag_type), cur_file)) score += points.get(tag_type) + # Don't score twice on same tag + scored_on.append(ss(alt).lower()) + # Check extention for ext in quality.get('ext', []): if ext == extension: @@ -485,6 +490,7 @@ class QualityPlugin(Plugin): 'Movie Name (2015).mp4': {'size': 6500, 'quality': 'brrip'}, 'Movie Name.2014.720p Web-Dl Aac2.0 h264-ReleaseGroup': {'size': 3800, 'quality': 'brrip'}, 'Movie Name.2014.720p.WEBRip.x264.AC3-ReleaseGroup': {'size': 3000, 'quality': 'scr'}, + 'Movie.Name.2014.1080p.HDCAM.-.ReleaseGroup': {'size': 5300, 'quality': 'cam'}, } correct = 0