From 3fe7d2ea154bba95c9e26384df877692fa5c0ff2 Mon Sep 17 00:00:00 2001 From: Ruud Date: Mon, 1 Apr 2013 21:18:29 +0200 Subject: [PATCH] Download id cleanup --- couchpotato/core/plugins/renamer/main.py | 67 +++++++++++--------------------- couchpotato/core/plugins/scanner/main.py | 30 +++++++------- 2 files changed, 38 insertions(+), 59 deletions(-) diff --git a/couchpotato/core/plugins/renamer/main.py b/couchpotato/core/plugins/renamer/main.py index de35943..e3291f6 100644 --- a/couchpotato/core/plugins/renamer/main.py +++ b/couchpotato/core/plugins/renamer/main.py @@ -7,7 +7,8 @@ from couchpotato.core.helpers.variable import getExt, mergeDicts, getTitle, \ getImdb from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin -from couchpotato.core.settings.model import Library, File, Profile, Release, ReleaseInfo +from couchpotato.core.settings.model import Library, File, Profile, Release, \ + ReleaseInfo from couchpotato.environment import Env import errno import os @@ -27,21 +28,15 @@ class Renamer(Plugin): def __init__(self): addApiView('renamer.scan', self.scanView, docs = { - 'desc': 'For the renamer to check for new files to rename', - }) - - addEvent('renamer.scan', self.scan) - - addApiView('renamer.scanfolder', self.scanfolderView, docs = { - 'desc': 'For the renamer to check for new files to rename in a specified folder', + 'desc': 'For the renamer to check for new files to rename in a folder', 'params': { - 'movie_folder': {'desc': 'The folder of the movie to scan'}, + 'movie_folder': {'desc': 'Optional: The folder of the movie to scan. Keep empty for default renamer folder.'}, 'downloader' : {'desc': 'Optional: The downloader this movie has been downloaded with'}, 'download_id': {'desc': 'Optional: The downloader\'s nzb/torrent ID'}, }, }) - addEvent('renamer.scanfolder', self.scanfolder) + addEvent('renamer.scan', self.scan) addEvent('renamer.check_snatched', self.checkSnatched) addEvent('app.load', self.scan) @@ -67,33 +62,22 @@ class Renamer(Plugin): def scanView(self): - fireEventAsync('renamer.scan') - - return jsonified({ - 'success': True - }) - - def scan(self): - self.scanfolder() - - def scanfolderView(self): - params = getParams() movie_folder = params.get('movie_folder', None) downloader = params.get('downloader', None) download_id = params.get('download_id', None) - fireEventAsync('renamer.scanfolder', - movie_folder = movie_folder, - downloader = downloader, + fireEventAsync('renamer.scan', + movie_folder = movie_folder, + downloader = downloader, download_id = download_id ) return jsonified({ 'success': True }) - - def scanfolder(self, movie_folder = None, downloader = None, download_id = None): + + def scan(self, movie_folder = None, downloader = None, download_id = None): if self.isDisabled(): return @@ -116,7 +100,7 @@ class Renamer(Plugin): return # make sure the movie folder name is included in the search - folder = None + folder = None movie_files = [] if movie_folder: log.info('Scanning movie folder %s...', movie_folder) @@ -133,24 +117,19 @@ class Renamer(Plugin): db = get_session() # Get the release with the downloader ID that was downloded by the downloader - download_quality = None - download_imdb_id = None - if downloader and download_id: - # NOTE TO RUUD: Don't really know how to do this better... but there must be a way...? - rlsnfo_dwnlds = db.query(ReleaseInfo).filter_by(identifier = 'download_downloader', value = downloader) - rlsnfo_ids = db.query(ReleaseInfo).filter_by(identifier = 'download_id', value = download_id) - for rlsnfo_dwnld in rlsnfo_dwnlds: - for rlsnfo_id in rlsnfo_ids: - if rlsnfo_id.release == rlsnfo_dwnld.release: - rls = rlsnfo_id.release - - if rls: - download_imdb_id = rls.movie.library.identifier - download_quality = rls.quality.identifier + download_info = None + if download_id: + rls_info = db.query(ReleaseInfo).filter_by(identifier = 'download_id', value = download_id).first() + + if rls_info: + download_info = { + 'imdb_id': rls_info.release.movie.library.identifier, + 'quality': rls_info.release.quality.identifier, + } else: log.error('Download ID %s from downloader %s not found in releases', (download_id, downloader)) - - groups = fireEvent('scanner.scan', folder = folder if folder else self.conf('from'), files = movie_files, download_quality = download_quality, download_imdb_id = download_imdb_id, single = True) + + groups = fireEvent('scanner.scan', folder = folder if folder else self.conf('from'), files = movie_files, download_info = download_info, single = True) destination = self.conf('to') folder_name = self.conf('folder_name') @@ -677,7 +656,7 @@ class Renamer(Plugin): elif item['status'] == 'completed': log.info('Download of %s completed!', item['name']) if item['id'] and item['downloader'] and item['folder']: - fireEventAsync('renamer.scanfolder', movie_folder = item['folder'], downloader = item['downloader'], download_id = item['id']) + fireEventAsync('renamer.scan', movie_folder = item['folder'], downloader = item['downloader'], download_id = item['id']) else: scan_required = True diff --git a/couchpotato/core/plugins/scanner/main.py b/couchpotato/core/plugins/scanner/main.py index d714481..e7a9459 100644 --- a/couchpotato/core/plugins/scanner/main.py +++ b/couchpotato/core/plugins/scanner/main.py @@ -101,7 +101,7 @@ class Scanner(Plugin): addEvent('scanner.name_year', self.getReleaseNameYear) addEvent('scanner.partnumber', self.getPartNumber) - def scan(self, folder = None, files = None, download_imdb_id = None, download_quality = None, simple = False, newer_than = 0, on_found = None): + def scan(self, folder = None, files = None, download_info = None, simple = False, newer_than = 0, on_found = None): folder = ss(os.path.normpath(folder)) @@ -312,12 +312,11 @@ class Scanner(Plugin): valid_files[identifier] = group del movie_files - + # Make sure only one movie was found if a download ID is provided - if download_imdb_id and download_quality and not len(valid_files) == 1: - log.info('Download ID provided (%s), but more than one group found (%s). Ignoring Download ID...', (download_imdb_id, len(valid_files))) - download_imdb_id = None - download_quality = None + if download_info and not len(valid_files) == 1: + log.info('Download ID provided (%s), but more than one group found (%s). Ignoring Download ID...', (download_info.get('imdb_id'), len(valid_files))) + download_info = None # Determine file types processed_movies = {} @@ -351,7 +350,7 @@ class Scanner(Plugin): continue log.debug('Getting metadata for %s', identifier) - group['meta_data'] = self.getMetaData(group, folder = folder, download_quality = download_quality) + group['meta_data'] = self.getMetaData(group, folder = folder, download_info = download_info) # Subtitle meta group['subtitle_language'] = self.getSubtitleLanguage(group) if not simple else {} @@ -381,7 +380,7 @@ class Scanner(Plugin): del group['unsorted_files'] # Determine movie - group['library'] = self.determineMovie(group, download_imdb_id = download_imdb_id) + group['library'] = self.determineMovie(group, download_info = download_info) if not group['library']: log.error('Unable to determine movie: %s', group['identifiers']) else: @@ -406,7 +405,7 @@ class Scanner(Plugin): return processed_movies - def getMetaData(self, group, folder = '', download_quality = None): + def getMetaData(self, group, folder = '', download_info = None): data = {} files = list(group['files']['movie']) @@ -431,11 +430,11 @@ class Scanner(Plugin): # Use the quality guess first, if that failes use the quality we wanted to download data['quality'] = fireEvent('quality.guess', files = files, extra = data, single = True) if not data['quality']: - if download_quality: - data['quality'] = fireEvent('quality.single', download_quality, single = True) + if download_info and download_info.get('quality'): + data['quality'] = fireEvent('quality.single', download_info.get('quality'), single = True) else: data['quality'] = fireEvent('quality.single', 'dvdr' if group['is_dvd'] else 'dvdrip', single = True) - + data['quality_type'] = 'HD' if data.get('resolution_width', 0) >= 1280 or data['quality'].get('hd') else 'SD' filename = re.sub('(.cp\(tt[0-9{7}]+\))', '', files[0]) @@ -510,11 +509,12 @@ class Scanner(Plugin): return detected_languages - def determineMovie(self, group, download_imdb_id = None): + def determineMovie(self, group, download_info = None): + # Get imdb id from downloader - imdb_id = download_imdb_id + imdb_id = download_info and download_info.get('imdb_id') if imdb_id: - log.debug('Found movie via imdb id from it\'s download id: %s', download_imdb_id) + log.debug('Found movie via imdb id from it\'s download id: %s', download_info.get('imdb_id')) files = group['files']