diff --git a/couchpotato/core/plugins/renamer/main.py b/couchpotato/core/plugins/renamer/main.py index bbe79a3..f99c92c 100755 --- a/couchpotato/core/plugins/renamer/main.py +++ b/couchpotato/core/plugins/renamer/main.py @@ -31,6 +31,7 @@ class Renamer(Plugin): 'params': { 'async': {'desc': 'Optional: Set to 1 if you dont want to fire the renamer.scan asynchronous.'}, 'movie_folder': {'desc': 'Optional: The folder of the movie to scan. Keep empty for default renamer folder.'}, + 'files': {'desc': 'Optional: Provide the release files if more releases are in the same movie_folder, delimited with a \'|\'. Note that no dedicated release folder is expected for releases with one file.'}, 'downloader' : {'desc': 'Optional: The downloader the release has been downloaded with. \'download_id\' is required with this option.'}, 'download_id': {'desc': 'Optional: The nzb/torrent ID of the release in movie_folder. \'downloader\' is required with this option.'}, 'status': {'desc': 'Optional: The status of the release: \'completed\' (default) or \'seeding\''}, @@ -66,11 +67,12 @@ class Renamer(Plugin): movie_folder = sp(kwargs.get('movie_folder')) downloader = kwargs.get('downloader') download_id = kwargs.get('download_id') + files = '|'.join([sp(filename) for filename in splitString(kwargs.get('files'), '|')]) status = kwargs.get('status', 'completed') release_download = {'folder': movie_folder} if movie_folder else None if release_download: - release_download.update({'id': download_id, 'downloader': downloader, 'status': status} if download_id else {}) + release_download.update({'id': download_id, 'downloader': downloader, 'status': status, 'files': files} if download_id else {}) fire_handle = fireEvent if not async else fireEventAsync @@ -101,7 +103,7 @@ class Renamer(Plugin): no_process.extend([item['destination'] for item in cat_list]) try: if Env.setting('library', section = 'manage').strip(): - no_process.extend(splitString(Env.setting('library', section = 'manage'), '::')) + no_process.extend([sp(manage_folder) for manage_folder in splitString(Env.setting('library', section = 'manage'), '::')]) except: pass @@ -123,7 +125,7 @@ class Renamer(Plugin): if len(release_download.get('files')) == 1: new_movie_folder = from_folder else: - new_movie_folder = sp(os.path.join(from_folder, os.path.basename(movie_folder))) + new_movie_folder = os.path.join(from_folder, os.path.basename(movie_folder)) if not os.path.isdir(new_movie_folder): log.error('The provided movie folder %s does not exist and could also not be found in the \'from\' folder.', movie_folder) @@ -170,7 +172,7 @@ class Renamer(Plugin): # Get all files from the specified folder try: for root, folders, names in os.walk(movie_folder): - files.extend([os.path.join(root, name) for name in names]) + files.extend([sp(os.path.join(root, name)) for name in names]) except: log.error('Failed getting files from %s: %s', (movie_folder, traceback.format_exc())) @@ -543,7 +545,7 @@ class Renamer(Plugin): group_folder = movie_folder else: # Delete the first empty subfolder in the tree relative to the 'from' folder - group_folder = sp(os.path.join(from_folder, os.path.relpath(group['parentdir'], from_folder)).split(os.path.sep)[0]) + group_folder = sp(os.path.join(from_folder, os.path.relpath(group['parentdir'], from_folder).split(os.path.sep)[0])) try: log.info('Deleting folder: %s', group_folder) @@ -603,7 +605,7 @@ Remove it if you want it to be renamed (again, or at least let it try again) elif isinstance(release_download, dict): # Tag download_files if they are known if release_download['files']: - tag_files = release_download['files'].split('|') + tag_files = splitString(release_download['files'], '|') # Tag all files in release folder else: @@ -627,17 +629,17 @@ Remove it if you want it to be renamed (again, or at least let it try again) # Untag download_files if they are known if release_download['files']: - tag_files = release_download['files'].split('|') + tag_files = splitString(release_download['files'], '|') # Untag all files in release folder else: for root, folders, names in os.walk(release_download['folder']): - tag_files.extend([os.path.join(root, name) for name in names if not os.path.splitext(name)[1] == '.ignore']) + tag_files.extend([sp(os.path.join(root, name)) for name in names if not os.path.splitext(name)[1] == '.ignore']) # Find all .ignore files in folder ignore_files = [] for root, dirnames, filenames in os.walk(folder): - ignore_files.extend(fnmatch.filter([os.path.join(root, filename) for filename in filenames], '*%s.ignore' % tag)) + ignore_files.extend(fnmatch.filter([sp(os.path.join(root, filename)) for filename in filenames], '*%s.ignore' % tag)) # Match all found ignore files with the tag_files and delete if found for tag_file in tag_files: @@ -661,16 +663,16 @@ Remove it if you want it to be renamed (again, or at least let it try again) # Find tag on download_files if they are known if release_download['files']: - tag_files = release_download['files'].split('|') + tag_files = splitString(release_download['files'], '|') # Find tag on all files in release folder else: for root, folders, names in os.walk(release_download['folder']): - tag_files.extend([os.path.join(root, name) for name in names if not os.path.splitext(name)[1] == '.ignore']) + tag_files.extend([sp(os.path.join(root, name)) for name in names if not os.path.splitext(name)[1] == '.ignore']) # Find all .ignore files in folder for root, dirnames, filenames in os.walk(folder): - ignore_files.extend(fnmatch.filter([os.path.join(root, filename) for filename in filenames], '*%s.ignore' % tag)) + ignore_files.extend(fnmatch.filter([sp(os.path.join(root, filename)) for filename in filenames], '*%s.ignore' % tag)) # Match all found ignore files with the tag_files and return True found for tag_file in tag_files: @@ -769,7 +771,7 @@ Remove it if you want it to be renamed (again, or at least let it try again) return string def deleteEmptyFolder(self, folder, show_error = True): - folder = ss(folder) + folder = sp(folder) loge = log.error if show_error else log.debug for root, dirs, files in os.walk(folder): @@ -993,7 +995,7 @@ Remove it if you want it to be renamed (again, or at least let it try again) return release_download['id'] and release_download['downloader'] and release_download['folder'] def movieInFromFolder(self, movie_folder): - return movie_folder and sp(self.conf('from')) in movie_folder or not movie_folder + return movie_folder and sp(self.conf('from')) in sp(movie_folder) or not movie_folder def extractFiles(self, folder = None, movie_folder = None, files = None, cleanup = False): if not files: files = [] @@ -1003,9 +1005,11 @@ Remove it if you want it to be renamed (again, or at least let it try again) restfile_regex = '(^%s\.(?:part(?!0*1\.rar$)\d+\.rar$|[rstuvw]\d+$))' extr_files = [] + from_folder = sp(self.conf('from')) + # Check input variables if not folder: - folder = sp(self.conf('from')) + folder = from_folder check_file_date = True if movie_folder: @@ -1013,7 +1017,7 @@ Remove it if you want it to be renamed (again, or at least let it try again) if not files: for root, folders, names in os.walk(folder): - files.extend([os.path.join(root, name) for name in names]) + files.extend([sp(os.path.join(root, name)) for name in names]) # Find all archive files archives = [re.search(archive_regex, name).groupdict() for name in files if re.search(archive_regex, name)] @@ -1059,13 +1063,13 @@ Remove it if you want it to be renamed (again, or at least let it try again) log.info('Archive %s found. Extracting...', os.path.basename(archive['file'])) try: rar_handle = RarFile(archive['file']) - extr_path = os.path.join(sp(self.conf('from')), os.path.relpath(os.path.dirname(archive['file']), folder)) + extr_path = os.path.join(from_folder, os.path.relpath(os.path.dirname(archive['file']), folder)) self.makeDir(extr_path) for packedinfo in rar_handle.infolist(): - if not packedinfo.isdir and not os.path.isfile(os.path.join(extr_path, os.path.basename(packedinfo.filename))): + if not packedinfo.isdir and not os.path.isfile(sp(os.path.join(extr_path, os.path.basename(packedinfo.filename)))): log.debug('Extracting %s...', packedinfo.filename) rar_handle.extract(condition = [packedinfo.index], path = extr_path, withSubpath = False, overwrite = False) - extr_files.append(os.path.join(extr_path, os.path.basename(packedinfo.filename))) + extr_files.append(sp(os.path.join(extr_path, os.path.basename(packedinfo.filename)))) del rar_handle except Exception, e: log.error('Failed to extract %s: %s %s', (archive['file'], e, traceback.format_exc())) @@ -1082,9 +1086,9 @@ Remove it if you want it to be renamed (again, or at least let it try again) files.remove(filename) # Move the rest of the files and folders if any files are extracted to the from folder (only if folder was provided) - if extr_files and folder != sp(self.conf('from')): + if extr_files and folder != from_folder: for leftoverfile in list(files): - move_to = os.path.join(sp(self.conf('from')), os.path.relpath(leftoverfile, folder)) + move_to = os.path.join(from_folder, os.path.relpath(leftoverfile, folder)) try: self.makeDir(os.path.dirname(move_to)) @@ -1107,8 +1111,8 @@ Remove it if you want it to be renamed (again, or at least let it try again) log.debug('Removing old movie folder %s...', movie_folder) self.deleteEmptyFolder(movie_folder) - movie_folder = os.path.join(sp(self.conf('from')), os.path.relpath(movie_folder, folder)) - folder = sp(self.conf('from')) + movie_folder = os.path.join(from_folder, os.path.relpath(movie_folder, folder)) + folder = from_folder if extr_files: files.extend(extr_files) diff --git a/couchpotato/core/plugins/scanner/main.py b/couchpotato/core/plugins/scanner/main.py index e77e62a..eb193ad 100644 --- a/couchpotato/core/plugins/scanner/main.py +++ b/couchpotato/core/plugins/scanner/main.py @@ -124,7 +124,7 @@ class Scanner(Plugin): try: files = [] for root, dirs, walk_files in os.walk(folder): - files.extend([os.path.join(root, filename) for filename in walk_files]) + files.extend([sp(os.path.join(root, filename)) for filename in walk_files]) # Break if CP wants to shut down if self.shuttingDown(): @@ -134,7 +134,7 @@ class Scanner(Plugin): log.error('Failed getting files from %s: %s', (folder, traceback.format_exc())) else: check_file_date = False - files = [ss(x) for x in files] + files = [sp(x) for x in files] for file_path in files: diff --git a/couchpotato/core/plugins/subtitle/main.py b/couchpotato/core/plugins/subtitle/main.py index e447dac..7504d6a 100644 --- a/couchpotato/core/plugins/subtitle/main.py +++ b/couchpotato/core/plugins/subtitle/main.py @@ -1,6 +1,6 @@ from couchpotato import get_session from couchpotato.core.event import addEvent, fireEvent -from couchpotato.core.helpers.encoding import toUnicode +from couchpotato.core.helpers.encoding import toUnicode, sp from couchpotato.core.helpers.variable import splitString from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin @@ -58,9 +58,9 @@ class Subtitle(Plugin): for d_sub in downloaded: log.info('Found subtitle (%s): %s', (d_sub.language.alpha2, files)) - group['files']['subtitle'].append(d_sub.path) - group['before_rename'].append(d_sub.path) - group['subtitle_language'][d_sub.path] = [d_sub.language.alpha2] + group['files']['subtitle'].append(sp(d_sub.path)) + group['before_rename'].append(sp(d_sub.path)) + group['subtitle_language'][sp(d_sub.path)] = [d_sub.language.alpha2] return True