Merge branch 'develop_fixes' of git://github.com/mano3m/CouchPotatoServer into mano3m-develop_fixes
This commit is contained in:
@@ -31,6 +31,7 @@ class Renamer(Plugin):
|
|||||||
'params': {
|
'params': {
|
||||||
'async': {'desc': 'Optional: Set to 1 if you dont want to fire the renamer.scan asynchronous.'},
|
'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.'},
|
'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.'},
|
'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.'},
|
'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\''},
|
'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'))
|
movie_folder = sp(kwargs.get('movie_folder'))
|
||||||
downloader = kwargs.get('downloader')
|
downloader = kwargs.get('downloader')
|
||||||
download_id = kwargs.get('download_id')
|
download_id = kwargs.get('download_id')
|
||||||
|
files = '|'.join([sp(filename) for filename in splitString(kwargs.get('files'), '|')])
|
||||||
status = kwargs.get('status', 'completed')
|
status = kwargs.get('status', 'completed')
|
||||||
|
|
||||||
release_download = {'folder': movie_folder} if movie_folder else None
|
release_download = {'folder': movie_folder} if movie_folder else None
|
||||||
if release_download:
|
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
|
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])
|
no_process.extend([item['destination'] for item in cat_list])
|
||||||
try:
|
try:
|
||||||
if Env.setting('library', section = 'manage').strip():
|
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:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -123,7 +125,7 @@ class Renamer(Plugin):
|
|||||||
if len(release_download.get('files')) == 1:
|
if len(release_download.get('files')) == 1:
|
||||||
new_movie_folder = from_folder
|
new_movie_folder = from_folder
|
||||||
else:
|
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):
|
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)
|
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
|
# Get all files from the specified folder
|
||||||
try:
|
try:
|
||||||
for root, folders, names in os.walk(movie_folder):
|
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:
|
except:
|
||||||
log.error('Failed getting files from %s: %s', (movie_folder, traceback.format_exc()))
|
log.error('Failed getting files from %s: %s', (movie_folder, traceback.format_exc()))
|
||||||
|
|
||||||
@@ -543,7 +545,7 @@ class Renamer(Plugin):
|
|||||||
group_folder = movie_folder
|
group_folder = movie_folder
|
||||||
else:
|
else:
|
||||||
# Delete the first empty subfolder in the tree relative to the 'from' folder
|
# 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:
|
try:
|
||||||
log.info('Deleting folder: %s', group_folder)
|
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):
|
elif isinstance(release_download, dict):
|
||||||
# Tag download_files if they are known
|
# Tag download_files if they are known
|
||||||
if release_download['files']:
|
if release_download['files']:
|
||||||
tag_files = release_download['files'].split('|')
|
tag_files = splitString(release_download['files'], '|')
|
||||||
|
|
||||||
# Tag all files in release folder
|
# Tag all files in release folder
|
||||||
else:
|
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
|
# Untag download_files if they are known
|
||||||
if release_download['files']:
|
if release_download['files']:
|
||||||
tag_files = release_download['files'].split('|')
|
tag_files = splitString(release_download['files'], '|')
|
||||||
|
|
||||||
# Untag all files in release folder
|
# Untag all files in release folder
|
||||||
else:
|
else:
|
||||||
for root, folders, names in os.walk(release_download['folder']):
|
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
|
# Find all .ignore files in folder
|
||||||
ignore_files = []
|
ignore_files = []
|
||||||
for root, dirnames, filenames in os.walk(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 delete if found
|
# Match all found ignore files with the tag_files and delete if found
|
||||||
for tag_file in tag_files:
|
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
|
# Find tag on download_files if they are known
|
||||||
if release_download['files']:
|
if release_download['files']:
|
||||||
tag_files = release_download['files'].split('|')
|
tag_files = splitString(release_download['files'], '|')
|
||||||
|
|
||||||
# Find tag on all files in release folder
|
# Find tag on all files in release folder
|
||||||
else:
|
else:
|
||||||
for root, folders, names in os.walk(release_download['folder']):
|
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
|
# Find all .ignore files in folder
|
||||||
for root, dirnames, filenames in os.walk(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
|
# Match all found ignore files with the tag_files and return True found
|
||||||
for tag_file in tag_files:
|
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
|
return string
|
||||||
|
|
||||||
def deleteEmptyFolder(self, folder, show_error = True):
|
def deleteEmptyFolder(self, folder, show_error = True):
|
||||||
folder = ss(folder)
|
folder = sp(folder)
|
||||||
|
|
||||||
loge = log.error if show_error else log.debug
|
loge = log.error if show_error else log.debug
|
||||||
for root, dirs, files in os.walk(folder):
|
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']
|
return release_download['id'] and release_download['downloader'] and release_download['folder']
|
||||||
|
|
||||||
def movieInFromFolder(self, movie_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):
|
def extractFiles(self, folder = None, movie_folder = None, files = None, cleanup = False):
|
||||||
if not files: files = []
|
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+$))'
|
restfile_regex = '(^%s\.(?:part(?!0*1\.rar$)\d+\.rar$|[rstuvw]\d+$))'
|
||||||
extr_files = []
|
extr_files = []
|
||||||
|
|
||||||
|
from_folder = sp(self.conf('from'))
|
||||||
|
|
||||||
# Check input variables
|
# Check input variables
|
||||||
if not folder:
|
if not folder:
|
||||||
folder = sp(self.conf('from'))
|
folder = from_folder
|
||||||
|
|
||||||
check_file_date = True
|
check_file_date = True
|
||||||
if movie_folder:
|
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:
|
if not files:
|
||||||
for root, folders, names in os.walk(folder):
|
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
|
# Find all archive files
|
||||||
archives = [re.search(archive_regex, name).groupdict() for name in files if re.search(archive_regex, name)]
|
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']))
|
log.info('Archive %s found. Extracting...', os.path.basename(archive['file']))
|
||||||
try:
|
try:
|
||||||
rar_handle = RarFile(archive['file'])
|
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)
|
self.makeDir(extr_path)
|
||||||
for packedinfo in rar_handle.infolist():
|
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)
|
log.debug('Extracting %s...', packedinfo.filename)
|
||||||
rar_handle.extract(condition = [packedinfo.index], path = extr_path, withSubpath = False, overwrite = False)
|
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
|
del rar_handle
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
log.error('Failed to extract %s: %s %s', (archive['file'], e, traceback.format_exc()))
|
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)
|
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)
|
# 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):
|
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:
|
try:
|
||||||
self.makeDir(os.path.dirname(move_to))
|
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)
|
log.debug('Removing old movie folder %s...', movie_folder)
|
||||||
self.deleteEmptyFolder(movie_folder)
|
self.deleteEmptyFolder(movie_folder)
|
||||||
|
|
||||||
movie_folder = os.path.join(sp(self.conf('from')), os.path.relpath(movie_folder, folder))
|
movie_folder = os.path.join(from_folder, os.path.relpath(movie_folder, folder))
|
||||||
folder = sp(self.conf('from'))
|
folder = from_folder
|
||||||
|
|
||||||
if extr_files:
|
if extr_files:
|
||||||
files.extend(extr_files)
|
files.extend(extr_files)
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ class Scanner(Plugin):
|
|||||||
try:
|
try:
|
||||||
files = []
|
files = []
|
||||||
for root, dirs, walk_files in os.walk(folder):
|
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
|
# Break if CP wants to shut down
|
||||||
if self.shuttingDown():
|
if self.shuttingDown():
|
||||||
@@ -134,7 +134,7 @@ class Scanner(Plugin):
|
|||||||
log.error('Failed getting files from %s: %s', (folder, traceback.format_exc()))
|
log.error('Failed getting files from %s: %s', (folder, traceback.format_exc()))
|
||||||
else:
|
else:
|
||||||
check_file_date = False
|
check_file_date = False
|
||||||
files = [ss(x) for x in files]
|
files = [sp(x) for x in files]
|
||||||
|
|
||||||
|
|
||||||
for file_path in files:
|
for file_path in files:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from couchpotato import get_session
|
from couchpotato import get_session
|
||||||
from couchpotato.core.event import addEvent, fireEvent
|
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.helpers.variable import splitString
|
||||||
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
|
||||||
@@ -58,9 +58,9 @@ class Subtitle(Plugin):
|
|||||||
|
|
||||||
for d_sub in downloaded:
|
for d_sub in downloaded:
|
||||||
log.info('Found subtitle (%s): %s', (d_sub.language.alpha2, files))
|
log.info('Found subtitle (%s): %s', (d_sub.language.alpha2, files))
|
||||||
group['files']['subtitle'].append(d_sub.path)
|
group['files']['subtitle'].append(sp(d_sub.path))
|
||||||
group['before_rename'].append(d_sub.path)
|
group['before_rename'].append(sp(d_sub.path))
|
||||||
group['subtitle_language'][d_sub.path] = [d_sub.language.alpha2]
|
group['subtitle_language'][sp(d_sub.path)] = [d_sub.language.alpha2]
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user