Browse Source

Download id cleanup

pull/1595/head
Ruud 12 years ago
parent
commit
3fe7d2ea15
  1. 67
      couchpotato/core/plugins/renamer/main.py
  2. 30
      couchpotato/core/plugins/scanner/main.py

67
couchpotato/core/plugins/renamer/main.py

@ -7,7 +7,8 @@ from couchpotato.core.helpers.variable import getExt, mergeDicts, getTitle, \
getImdb getImdb
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.plugins.base import Plugin 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 from couchpotato.environment import Env
import errno import errno
import os import os
@ -27,21 +28,15 @@ class Renamer(Plugin):
def __init__(self): def __init__(self):
addApiView('renamer.scan', self.scanView, docs = { addApiView('renamer.scan', self.scanView, docs = {
'desc': 'For the renamer to check for new files to rename', 'desc': 'For the renamer to check for new files to rename in a folder',
})
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',
'params': { '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'}, 'downloader' : {'desc': 'Optional: The downloader this movie has been downloaded with'},
'download_id': {'desc': 'Optional: The downloader\'s nzb/torrent ID'}, '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('renamer.check_snatched', self.checkSnatched)
addEvent('app.load', self.scan) addEvent('app.load', self.scan)
@ -67,33 +62,22 @@ class Renamer(Plugin):
def scanView(self): def scanView(self):
fireEventAsync('renamer.scan')
return jsonified({
'success': True
})
def scan(self):
self.scanfolder()
def scanfolderView(self):
params = getParams() params = getParams()
movie_folder = params.get('movie_folder', None) movie_folder = params.get('movie_folder', None)
downloader = params.get('downloader', None) downloader = params.get('downloader', None)
download_id = params.get('download_id', None) download_id = params.get('download_id', None)
fireEventAsync('renamer.scanfolder', fireEventAsync('renamer.scan',
movie_folder = movie_folder, movie_folder = movie_folder,
downloader = downloader, downloader = downloader,
download_id = download_id download_id = download_id
) )
return jsonified({ return jsonified({
'success': True '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(): if self.isDisabled():
return return
@ -116,7 +100,7 @@ class Renamer(Plugin):
return return
# make sure the movie folder name is included in the search # make sure the movie folder name is included in the search
folder = None folder = None
movie_files = [] movie_files = []
if movie_folder: if movie_folder:
log.info('Scanning movie folder %s...', movie_folder) log.info('Scanning movie folder %s...', movie_folder)
@ -133,24 +117,19 @@ class Renamer(Plugin):
db = get_session() db = get_session()
# Get the release with the downloader ID that was downloded by the downloader # Get the release with the downloader ID that was downloded by the downloader
download_quality = None download_info = None
download_imdb_id = None if download_id:
if downloader and download_id: rls_info = db.query(ReleaseInfo).filter_by(identifier = 'download_id', value = download_id).first()
# 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) if rls_info:
rlsnfo_ids = db.query(ReleaseInfo).filter_by(identifier = 'download_id', value = download_id) download_info = {
for rlsnfo_dwnld in rlsnfo_dwnlds: 'imdb_id': rls_info.release.movie.library.identifier,
for rlsnfo_id in rlsnfo_ids: 'quality': rls_info.release.quality.identifier,
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
else: else:
log.error('Download ID %s from downloader %s not found in releases', (download_id, downloader)) 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') destination = self.conf('to')
folder_name = self.conf('folder_name') folder_name = self.conf('folder_name')
@ -677,7 +656,7 @@ class Renamer(Plugin):
elif item['status'] == 'completed': elif item['status'] == 'completed':
log.info('Download of %s completed!', item['name']) log.info('Download of %s completed!', item['name'])
if item['id'] and item['downloader'] and item['folder']: 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: else:
scan_required = True scan_required = True

30
couchpotato/core/plugins/scanner/main.py

@ -101,7 +101,7 @@ class Scanner(Plugin):
addEvent('scanner.name_year', self.getReleaseNameYear) addEvent('scanner.name_year', self.getReleaseNameYear)
addEvent('scanner.partnumber', self.getPartNumber) 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)) folder = ss(os.path.normpath(folder))
@ -312,12 +312,11 @@ class Scanner(Plugin):
valid_files[identifier] = group valid_files[identifier] = group
del movie_files del movie_files
# Make sure only one movie was found if a download ID is provided # 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: 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_imdb_id, len(valid_files))) 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_imdb_id = None download_info = None
download_quality = None
# Determine file types # Determine file types
processed_movies = {} processed_movies = {}
@ -351,7 +350,7 @@ class Scanner(Plugin):
continue continue
log.debug('Getting metadata for %s', identifier) 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 # Subtitle meta
group['subtitle_language'] = self.getSubtitleLanguage(group) if not simple else {} group['subtitle_language'] = self.getSubtitleLanguage(group) if not simple else {}
@ -381,7 +380,7 @@ class Scanner(Plugin):
del group['unsorted_files'] del group['unsorted_files']
# Determine movie # 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']: if not group['library']:
log.error('Unable to determine movie: %s', group['identifiers']) log.error('Unable to determine movie: %s', group['identifiers'])
else: else:
@ -406,7 +405,7 @@ class Scanner(Plugin):
return processed_movies return processed_movies
def getMetaData(self, group, folder = '', download_quality = None): def getMetaData(self, group, folder = '', download_info = None):
data = {} data = {}
files = list(group['files']['movie']) 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 # 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) data['quality'] = fireEvent('quality.guess', files = files, extra = data, single = True)
if not data['quality']: if not data['quality']:
if download_quality: if download_info and download_info.get('quality'):
data['quality'] = fireEvent('quality.single', download_quality, single = True) data['quality'] = fireEvent('quality.single', download_info.get('quality'), single = True)
else: else:
data['quality'] = fireEvent('quality.single', 'dvdr' if group['is_dvd'] else 'dvdrip', single = True) 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' 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]) filename = re.sub('(.cp\(tt[0-9{7}]+\))', '', files[0])
@ -510,11 +509,12 @@ class Scanner(Plugin):
return detected_languages return detected_languages
def determineMovie(self, group, download_imdb_id = None): def determineMovie(self, group, download_info = None):
# Get imdb id from downloader # Get imdb id from downloader
imdb_id = download_imdb_id imdb_id = download_info and download_info.get('imdb_id')
if 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'] files = group['files']

Loading…
Cancel
Save