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',
'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.'},
'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.'},
'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\''},
@@ -64,23 +65,25 @@ class Renamer(Plugin):
async = tryInt(kwargs.get('async', 0))
movie_folder = sp(kwargs.get('movie_folder'))
base_folder = sp(kwargs.get('base_folder'))
downloader = kwargs.get('downloader')
download_id = kwargs.get('download_id')
status = kwargs.get('status', 'completed')
release_download = {'folder': movie_folder} if movie_folder else None
if release_download:
release_download = None
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 {})
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 {
'success': True
}
def scan(self, release_download = None):
def scan(self, base_folder = None, release_download = None):
if self.isDisabled():
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.')
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'))
# 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
no_process = [to_folder]
@@ -493,7 +496,7 @@ class Renamer(Plugin):
if os.path.isfile(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:
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']
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):
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+$))'
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:
@@ -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']))
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 = sp(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))):
@@ -1082,9 +1087,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 sp(folder) != from_folder:
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:
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)
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 = sp(os.path.join(from_folder, os.path.relpath(movie_folder, folder)))
folder = from_folder
if extr_files:
files.extend(extr_files)
+52 -3
View File
@@ -4,6 +4,7 @@ Page.Wanted = new Class({
name: 'wanted',
title: 'Gimmy gimmy gimmy!',
folder_browser: null,
indexAction: function(){
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
self.wanted = new MovieList({
'identifier': 'wanted',
'status': 'active',
'actions': [MA.IMDB, MA.Trailer, MA.Release, MA.Edit, MA.Refresh, MA.Readd, MA.Delete],
'add_new': true,
'menu': [self.manual_search],
'menu': [self.manual_search, self.scan_folder],
'on_empty_element': App.createUserscriptButtons().addClass('empty_wanted')
});
$(self.wanted).inject(self.el);
@@ -69,6 +79,45 @@ Page.Wanted = new Class({
});
}, 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();
}
}
});
+3 -1
View File
@@ -113,6 +113,8 @@
width: 20px;
}
.Scan_folder { padding: 0 !important; }
.page .ctrlHolder {
line-height: 25px;
padding: 10px 10px 10px 30px;
@@ -159,7 +161,7 @@
}
.page .xsmall { width: 20px !important; text-align: center; }
.page .enabler {
display: block;
}