Refactor downloaders and pages
This commit is contained in:
@@ -141,6 +141,8 @@
|
||||
var pg = new Page[class_name](self, {});
|
||||
self.pages[class_name] = pg;
|
||||
|
||||
self.fireEvent('load'+class_name);
|
||||
|
||||
$(pg).inject(self.content);
|
||||
});
|
||||
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
var DownloadersBase = new Class({
|
||||
|
||||
Implements: [Events],
|
||||
|
||||
initialize: function(){
|
||||
var self = this;
|
||||
|
||||
// Add test buttons to settings page
|
||||
App.addEvent('load', self.addTestButtons.bind(self));
|
||||
|
||||
},
|
||||
|
||||
// Downloaders setting tests
|
||||
addTestButtons: function(){
|
||||
var self = this;
|
||||
|
||||
var setting_page = App.getPage('Settings');
|
||||
setting_page.addEvent('create', function(){
|
||||
Object.each(setting_page.tabs.downloaders.groups, self.addTestButton.bind(self))
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
addTestButton: function(fieldset, plugin_name){
|
||||
var self = this,
|
||||
button_name = self.testButtonName(fieldset);
|
||||
|
||||
if(button_name.contains('Downloaders')) return;
|
||||
|
||||
new Element('.ctrlHolder.test_button').adopt(
|
||||
new Element('a.button', {
|
||||
'text': button_name,
|
||||
'events': {
|
||||
'click': function(){
|
||||
var button = fieldset.getElement('.test_button .button');
|
||||
button.set('text', 'Connecting...');
|
||||
|
||||
Api.request('download.'+plugin_name+'.test', {
|
||||
'onComplete': function(json){
|
||||
|
||||
button.set('text', button_name);
|
||||
|
||||
if(json.success){
|
||||
var message = new Element('span.success', {
|
||||
'text': 'Connection successful'
|
||||
}).inject(button, 'after')
|
||||
}
|
||||
else {
|
||||
var msg_text = 'Connection failed. Check logs for details.';
|
||||
if(json.hasOwnProperty('msg')) msg_text = json.msg;
|
||||
var message = new Element('span.failed', {
|
||||
'text': msg_text
|
||||
}).inject(button, 'after')
|
||||
}
|
||||
|
||||
(function(){
|
||||
message.destroy();
|
||||
}).delay(3000)
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
).inject(fieldset);
|
||||
|
||||
},
|
||||
|
||||
testButtonName: function(fieldset){
|
||||
var name = String(fieldset.getElement('h2').innerHTML).substring(0,String(fieldset.getElement('h2').innerHTML).indexOf("<span"));
|
||||
return 'Test '+name;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
window.Downloaders = new DownloadersBase();
|
||||
@@ -6,7 +6,7 @@ var AboutSettingTab = new Class({
|
||||
initialize: function(){
|
||||
var self = this;
|
||||
|
||||
App.addEvent('load', self.addSettings.bind(self))
|
||||
App.addEvent('loadSettings', self.addSettings.bind(self))
|
||||
|
||||
},
|
||||
|
||||
@@ -124,4 +124,4 @@ var AboutSettingTab = new Class({
|
||||
|
||||
window.addEvent('domready', function(){
|
||||
new AboutSettingTab();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,149 +0,0 @@
|
||||
Page.Manage = new Class({
|
||||
|
||||
Extends: PageBase,
|
||||
|
||||
name: 'manage',
|
||||
title: 'Do stuff to your existing movies!',
|
||||
|
||||
indexAction: function(){
|
||||
var self = this;
|
||||
|
||||
if(!self.list){
|
||||
self.refresh_button = new Element('a', {
|
||||
'title': 'Rescan your library for new movies',
|
||||
'text': 'Full library refresh',
|
||||
'events':{
|
||||
'click': self.refresh.bind(self, true)
|
||||
}
|
||||
});
|
||||
|
||||
self.refresh_quick = new Element('a', {
|
||||
'title': 'Just scan for recently changed',
|
||||
'text': 'Quick library scan',
|
||||
'events':{
|
||||
'click': self.refresh.bind(self, false)
|
||||
}
|
||||
});
|
||||
|
||||
self.list = new MovieList({
|
||||
'identifier': 'manage',
|
||||
'filter': {
|
||||
'status': 'done',
|
||||
'release_status': 'done',
|
||||
'status_or': 1
|
||||
},
|
||||
'actions': [MA.IMDB, MA.Trailer, MA.Files, MA.Readd, MA.Edit, MA.Delete],
|
||||
'menu': [self.refresh_button, self.refresh_quick],
|
||||
'on_empty_element': new Element('div.empty_manage').adopt(
|
||||
new Element('div', {
|
||||
'text': 'Seems like you don\'t have anything in your library yet.'
|
||||
}),
|
||||
new Element('div', {
|
||||
'text': 'Add your existing movie folders in '
|
||||
}).adopt(
|
||||
new Element('a', {
|
||||
'text': 'Settings > Manage',
|
||||
'href': App.createUrl('settings/manage')
|
||||
})
|
||||
),
|
||||
new Element('div.after_manage', {
|
||||
'text': 'When you\'ve done that, hit this button → '
|
||||
}).adopt(
|
||||
new Element('a.button.green', {
|
||||
'text': 'Hit me, but not too hard',
|
||||
'events':{
|
||||
'click': self.refresh.bind(self, true)
|
||||
}
|
||||
})
|
||||
)
|
||||
)
|
||||
});
|
||||
$(self.list).inject(self.el);
|
||||
|
||||
// Check if search is in progress
|
||||
self.startProgressInterval();
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
refresh: function(full){
|
||||
var self = this;
|
||||
|
||||
if(!self.update_in_progress){
|
||||
|
||||
Api.request('manage.update', {
|
||||
'data': {
|
||||
'full': +full
|
||||
}
|
||||
});
|
||||
|
||||
self.startProgressInterval();
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
startProgressInterval: function(){
|
||||
var self = this;
|
||||
|
||||
self.progress_interval = setInterval(function(){
|
||||
|
||||
if(self.progress_request && self.progress_request.running)
|
||||
return;
|
||||
|
||||
self.update_in_progress = true;
|
||||
self.progress_request = Api.request('manage.progress', {
|
||||
'onComplete': function(json){
|
||||
|
||||
if(!json || !json.progress){
|
||||
clearInterval(self.progress_interval);
|
||||
self.update_in_progress = false;
|
||||
if(self.progress_container){
|
||||
self.progress_container.destroy();
|
||||
self.list.update();
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Capture progress so we can use it in our *each* closure
|
||||
var progress = json.progress;
|
||||
|
||||
// Don't add loader when page is loading still
|
||||
if(!self.list.navigation)
|
||||
return;
|
||||
|
||||
if(!self.progress_container)
|
||||
self.progress_container = new Element('div.progress').inject(self.list.navigation, 'after');
|
||||
|
||||
self.progress_container.empty();
|
||||
|
||||
var sorted_table = self.parseProgress(json.progress);
|
||||
|
||||
sorted_table.each(function(folder){
|
||||
var folder_progress = progress[folder];
|
||||
new Element('div').adopt(
|
||||
new Element('span.folder', {'text': folder +
|
||||
(folder_progress.eta > 0 ? ', ' + new Date ().increment('second', folder_progress.eta).timeDiffInWords().replace('from now', 'to go') : '')
|
||||
}),
|
||||
new Element('span.percentage', {'text': folder_progress.total ? Math.round(((folder_progress.total-folder_progress.to_go)/folder_progress.total)*100) + '%' : '0%'})
|
||||
).inject(self.progress_container)
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
}, 1000);
|
||||
},
|
||||
|
||||
parseProgress: function (progress_object) {
|
||||
var folder, temp_array = [];
|
||||
|
||||
for (folder in progress_object) {
|
||||
if (progress_object.hasOwnProperty(folder)) {
|
||||
temp_array.push(folder)
|
||||
}
|
||||
}
|
||||
return temp_array.stableSort()
|
||||
}
|
||||
|
||||
});
|
||||
@@ -1,123 +0,0 @@
|
||||
Page.Wanted = new Class({
|
||||
|
||||
Extends: PageBase,
|
||||
|
||||
name: 'wanted',
|
||||
title: 'Gimmy gimmy gimmy!',
|
||||
folder_browser: null,
|
||||
|
||||
indexAction: function(){
|
||||
var self = this;
|
||||
|
||||
if(!self.wanted){
|
||||
|
||||
self.manual_search = new Element('a', {
|
||||
'title': 'Force a search for the full wanted list',
|
||||
'text': 'Search all wanted',
|
||||
'events':{
|
||||
'click': self.doFullSearch.bind(self, true)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
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, self.scan_folder],
|
||||
'on_empty_element': App.createUserscriptButtons().addClass('empty_wanted')
|
||||
});
|
||||
$(self.wanted).inject(self.el);
|
||||
|
||||
// Check if search is in progress
|
||||
self.startProgressInterval.delay(4000, self);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
doFullSearch: function(){
|
||||
var self = this;
|
||||
|
||||
if(!self.search_in_progress){
|
||||
|
||||
Api.request('movie.searcher.full_search');
|
||||
self.startProgressInterval();
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
startProgressInterval: function(){
|
||||
var self = this;
|
||||
|
||||
var start_text = self.manual_search.get('text');
|
||||
self.progress_interval = setInterval(function(){
|
||||
if(self.search_progress && self.search_progress.running) return;
|
||||
self.search_progress = Api.request('movie.searcher.progress', {
|
||||
'onComplete': function(json){
|
||||
self.search_in_progress = true;
|
||||
if(!json.movie){
|
||||
clearInterval(self.progress_interval);
|
||||
self.search_in_progress = false;
|
||||
self.manual_search.set('text', start_text);
|
||||
}
|
||||
else {
|
||||
var progress = json.movie;
|
||||
self.manual_search.set('text', 'Searching.. (' + Math.round(((progress.total-progress.to_go)/progress.total)*100) + '%)');
|
||||
}
|
||||
}
|
||||
});
|
||||
}, 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();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user