Merge branch 'refs/heads/mano3m-develop_scan_basefolder' into manual_scan

This commit is contained in:
Ruud
2013-11-16 14:29:54 +01:00
3 changed files with 75 additions and 19 deletions
+20 -15
View File
@@ -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)
+51 -2
View File
@@ -4,6 +4,7 @@ Page.Wanted = new Class({
name: 'wanted', name: 'wanted',
title: 'Gimmy gimmy gimmy!', title: 'Gimmy gimmy gimmy!',
folder_browser: null,
indexAction: function(){ indexAction: function(){
var self = this; var self = this;
@@ -18,13 +19,22 @@ Page.Wanted = new Class({
} }
}); });
self.scan_folder = new Element('a', {
'title': 'Scan a folder and rename all movies in it',
'text': 'Manual folder scan',
'events':{
'click': self.scanFolder.bind(self)
}
});
// Wanted movies // Wanted movies
self.wanted = new MovieList({ self.wanted = new MovieList({
'identifier': 'wanted', 'identifier': 'wanted',
'status': 'active', 'status': 'active',
'actions': [MA.IMDB, MA.Trailer, MA.Release, MA.Edit, MA.Refresh, MA.Readd, MA.Delete], 'actions': [MA.IMDB, MA.Trailer, MA.Release, MA.Edit, MA.Refresh, MA.Readd, MA.Delete],
'add_new': true, 'add_new': true,
'menu': [self.manual_search], 'menu': [self.manual_search, self.scan_folder],
'on_empty_element': App.createUserscriptButtons().addClass('empty_wanted') 'on_empty_element': App.createUserscriptButtons().addClass('empty_wanted')
}); });
$(self.wanted).inject(self.el); $(self.wanted).inject(self.el);
@@ -69,6 +79,45 @@ Page.Wanted = new Class({
}); });
}, 1000); }, 1000);
} },
scanFolder: function(e) {
(e).stop();
var self = this;
var options = {
'name': 'Scan_folder'
}
if(!self.folder_browser){
self.folder_browser = new Option['Directory']("Scan", "folder", "", options);
self.folder_browser.save = function() {
var folder = self.folder_browser.getValue();
Api.request('renamer.scan', {
'data': {
'base_folder': folder,
},
});
};
self.folder_browser.inject(self.el, 'top');
self.folder_browser.fireEvent('injected');
// Hide the settings box
self.folder_browser.directory_inlay.hide();
self.folder_browser.el.removeChild(self.folder_browser.el.firstChild);
self.folder_browser.showBrowser();
// Make adjustments to the browser
self.folder_browser.browser.getElements('.clear.button').hide();
self.folder_browser.save_button.text = "Select";
self.folder_browser.browser.style.zIndex=1000;
}
else{
self.folder_browser.showBrowser();
}
}
}); });
+2
View File
@@ -113,6 +113,8 @@
width: 20px; width: 20px;
} }
.Scan_folder { padding: 0 !important; }
.page .ctrlHolder { .page .ctrlHolder {
line-height: 25px; line-height: 25px;
padding: 10px 10px 10px 30px; padding: 10px 10px 10px 30px;