Manual scan folder cleanup
This commit is contained in:
1 parent
16cf220741
commit
3b3288c53d
2 files changed
+29
-33
No files matched your search
@@ -30,7 +30,8 @@ class Renamer(Plugin):
|
|||||||
'desc': 'For the renamer to check for new files to rename in a folder',
|
'desc': 'For the renamer to check for new files to rename in a folder',
|
||||||
'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.'},
|
'base_folder': {'desc': 'Optional: The folder to find releases in. Leave empty for default folder.'},
|
||||||
|
'movie_folder': {'desc': 'Optional: The folder of a specific release to scan. Don\'t use in combination with base_folder.'},
|
||||||
'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\''},
|
||||||
@@ -64,23 +65,25 @@ class Renamer(Plugin):
|
|||||||
|
|
||||||
async = tryInt(kwargs.get('async', 0))
|
async = tryInt(kwargs.get('async', 0))
|
||||||
movie_folder = sp(kwargs.get('movie_folder'))
|
movie_folder = sp(kwargs.get('movie_folder'))
|
||||||
|
base_folder = sp(kwargs.get('base_folder'))
|
||||||
downloader = kwargs.get('downloader')
|
downloader = kwargs.get('downloader')
|
||||||
download_id = kwargs.get('download_id')
|
download_id = kwargs.get('download_id')
|
||||||
status = kwargs.get('status', 'completed')
|
status = kwargs.get('status', 'completed')
|
||||||
|
|
||||||
release_download = {'folder': movie_folder} if movie_folder else None
|
release_download = None
|
||||||
if release_download:
|
if not base_folder and movie_folder:
|
||||||
|
release_download = {'folder': movie_folder}
|
||||||
release_download.update({'id': download_id, 'downloader': downloader, 'status': status} if download_id else {})
|
release_download.update({'id': download_id, 'downloader': downloader, 'status': status} if download_id else {})
|
||||||
|
|
||||||
fire_handle = fireEvent if not async else fireEventAsync
|
fire_handle = fireEvent if not async else fireEventAsync
|
||||||
|
|
||||||
fire_handle('renamer.scan', release_download)
|
fire_handle('renamer.scan', base_folder = base_folder, release_download = release_download)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'success': True
|
'success': True
|
||||||
}
|
}
|
||||||
|
|
||||||
def scan(self, release_download = None):
|
def scan(self, base_folder = None, release_download = None):
|
||||||
|
|
||||||
if self.isDisabled():
|
if self.isDisabled():
|
||||||
return
|
return
|
||||||
@@ -89,11 +92,11 @@ class Renamer(Plugin):
|
|||||||
log.info('Renamer is already running, if you see this often, check the logs above for errors.')
|
log.info('Renamer is already running, if you see this often, check the logs above for errors.')
|
||||||
return
|
return
|
||||||
|
|
||||||
from_folder = sp(self.conf('from'))
|
from_folder = sp(self.conf('from') if not base_folder else base_folder)
|
||||||
to_folder = sp(self.conf('to'))
|
to_folder = sp(self.conf('to'))
|
||||||
|
|
||||||
# Get movie folder to process
|
# Get movie folder to process
|
||||||
movie_folder = release_download and release_download.get('folder')
|
movie_folder = sp(release_download and release_download.get('folder'))
|
||||||
|
|
||||||
# Get all folders that should not be processed
|
# Get all folders that should not be processed
|
||||||
no_process = [to_folder]
|
no_process = [to_folder]
|
||||||
@@ -493,7 +496,7 @@ class Renamer(Plugin):
|
|||||||
if os.path.isfile(src):
|
if os.path.isfile(src):
|
||||||
os.remove(src)
|
os.remove(src)
|
||||||
|
|
||||||
parent_dir = os.path.dirname(src)
|
parent_dir = sp(os.path.dirname(src))
|
||||||
if delete_folders.count(parent_dir) == 0 and os.path.isdir(parent_dir) and not parent_dir in [destination, movie_folder] and not from_folder in parent_dir:
|
if delete_folders.count(parent_dir) == 0 and os.path.isdir(parent_dir) and not parent_dir in [destination, movie_folder] and not from_folder in parent_dir:
|
||||||
delete_folders.append(parent_dir)
|
delete_folders.append(parent_dir)
|
||||||
|
|
||||||
@@ -993,7 +996,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 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 +1006,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:
|
||||||
@@ -1059,7 +1064,7 @@ 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 = sp(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(os.path.join(extr_path, os.path.basename(packedinfo.filename))):
|
||||||
@@ -1082,9 +1087,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 sp(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 = sp(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 +1112,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 = sp(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)
|
||||||
|
|||||||
@@ -22,12 +22,12 @@ Page.Wanted = new Class({
|
|||||||
|
|
||||||
self.scan_folder = new Element('a', {
|
self.scan_folder = new Element('a', {
|
||||||
'title': 'Scan a folder and rename all movies in it',
|
'title': 'Scan a folder and rename all movies in it',
|
||||||
'text': 'Scan Folder',
|
'text': 'Manual folder scan',
|
||||||
'events':{
|
'events':{
|
||||||
'click': self.scanFolder.bind(self, event)
|
'click': self.scanFolder.bind(self)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Wanted movies
|
// Wanted movies
|
||||||
self.wanted = new MovieList({
|
self.wanted = new MovieList({
|
||||||
'identifier': 'wanted',
|
'identifier': 'wanted',
|
||||||
@@ -82,21 +82,12 @@ Page.Wanted = new Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
scanFolder: function(e) {
|
scanFolder: function(e) {
|
||||||
if (!e)
|
(e).stop();
|
||||||
e = window.event;
|
|
||||||
|
|
||||||
//IE9 & Other Browsers
|
|
||||||
if (e.stopPropagation) {
|
|
||||||
e.stopPropagation();
|
|
||||||
}
|
|
||||||
//IE8 and Lower
|
|
||||||
else {
|
|
||||||
e.cancelBubble = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
var options = {};
|
var options = {
|
||||||
options.name = "Scan_folder";
|
'name': 'Scan_folder'
|
||||||
|
}
|
||||||
|
|
||||||
if(!self.folder_browser){
|
if(!self.folder_browser){
|
||||||
self.folder_browser = new Option['Directory']("Scan", "folder", "", options);
|
self.folder_browser = new Option['Directory']("Scan", "folder", "", options);
|
||||||
@@ -108,7 +99,7 @@ Page.Wanted = new Class({
|
|||||||
'base_folder': folder,
|
'base_folder': folder,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
self.folder_browser.inject(self.el, 'top');
|
self.folder_browser.inject(self.el, 'top');
|
||||||
self.folder_browser.fireEvent('injected');
|
self.folder_browser.fireEvent('injected');
|
||||||
@@ -120,7 +111,7 @@ Page.Wanted = new Class({
|
|||||||
self.folder_browser.showBrowser();
|
self.folder_browser.showBrowser();
|
||||||
|
|
||||||
// Make adjustments to the browser
|
// Make adjustments to the browser
|
||||||
self.folder_browser.browser.getElementsByClassName("clear button")[0].hide()
|
self.folder_browser.browser.getElements('.clear.button').hide();
|
||||||
self.folder_browser.save_button.text = "Select";
|
self.folder_browser.save_button.text = "Select";
|
||||||
self.folder_browser.browser.style.zIndex=1000;
|
self.folder_browser.browser.style.zIndex=1000;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user