mirror of
https://github.com/moparisthebest/SickRage
synced 2024-11-14 05:15:12 -05:00
dddc66ee58
Retrieving of caps should no longer block the browser.
680 lines
21 KiB
JavaScript
680 lines
21 KiB
JavaScript
$(document).ready(function(){
|
|
|
|
$.fn.showHideProviders = function() {
|
|
$('.providerDiv').each(function(){
|
|
var providerName = $(this).attr('id');
|
|
var selectedProvider = $('#editAProvider :selected').val();
|
|
|
|
if (selectedProvider+'Div' == providerName)
|
|
$(this).show();
|
|
else
|
|
$(this).hide();
|
|
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Gets categories for the provided newznab provider.
|
|
* @param {String} isDefault
|
|
* @param {Array} selectedProvider
|
|
* @return no return data. Function updateNewznabCaps() is run at callback
|
|
*/
|
|
$.fn.getCategories = function (isDefault, selectedProvider) {
|
|
|
|
var name = selectedProvider[0];
|
|
var url = selectedProvider[1];
|
|
var key = selectedProvider[2];
|
|
|
|
|
|
if (!name)
|
|
return;
|
|
|
|
if (!url)
|
|
return;
|
|
|
|
if (!key)
|
|
return;
|
|
|
|
var params = {url: url, name: name, key: key};
|
|
var returnData;
|
|
|
|
$.getJSON(sbRoot + '/config/providers/getNewznabCategories', params,
|
|
function(data){
|
|
updateNewznabCaps( data, selectedProvider );
|
|
console.debug(data.tv_categories);
|
|
});
|
|
}
|
|
|
|
$.fn.addProvider = function (id, name, url, key, cat, isDefault, showProvider) {
|
|
|
|
url = $.trim(url);
|
|
if (!url)
|
|
return;
|
|
|
|
if (!/^https?:\/\//i.test(url))
|
|
url = "http://" + url;
|
|
|
|
if (url.match('/$') == null)
|
|
url = url + '/';
|
|
|
|
var newData = [isDefault, [name, url, key, cat]];
|
|
newznabProviders[id] = newData;
|
|
|
|
if (!isDefault){
|
|
$('#editANewznabProvider').addOption(id, name);
|
|
$(this).populateNewznabSection();
|
|
}
|
|
|
|
if ($('#provider_order_list > #'+id).length == 0 && showProvider != false) {
|
|
var toAdd = '<li class="ui-state-default" id="'+id+'"> <input type="checkbox" id="enable_'+id+'" class="provider_enabler" CHECKED> <a href="'+url+'" class="imgLink" target="_new"><img src="'+sbRoot+'/images/providers/newznab.png" alt="'+name+'" width="16" height="16"></a> '+name+'</li>'
|
|
|
|
$('#provider_order_list').append(toAdd);
|
|
$('#provider_order_list').sortable("refresh");
|
|
}
|
|
|
|
$(this).makeNewznabProviderString();
|
|
|
|
}
|
|
|
|
$.fn.addTorrentRssProvider = function (id, name, url, cookies) {
|
|
|
|
var newData = [name, url, cookies];
|
|
torrentRssProviders[id] = newData;
|
|
|
|
$('#editATorrentRssProvider').addOption(id, name);
|
|
$(this).populateTorrentRssSection();
|
|
|
|
if ($('#provider_order_list > #'+id).length == 0) {
|
|
var toAdd = '<li class="ui-state-default" id="'+id+'"> <input type="checkbox" id="enable_'+id+'" class="provider_enabler" CHECKED> <a href="'+url+'" class="imgLink" target="_new"><img src="'+sbRoot+'/images/providers/torrentrss.png" alt="'+name+'" width="16" height="16"></a> '+name+'</li>'
|
|
|
|
$('#provider_order_list').append(toAdd);
|
|
$('#provider_order_list').sortable("refresh");
|
|
}
|
|
|
|
$(this).makeTorrentRssProviderString();
|
|
|
|
}
|
|
|
|
$.fn.updateProvider = function (id, url, key, cat) {
|
|
|
|
newznabProviders[id][1][1] = url;
|
|
newznabProviders[id][1][2] = key;
|
|
newznabProviders[id][1][3] = cat;
|
|
|
|
$(this).populateNewznabSection();
|
|
|
|
$(this).makeNewznabProviderString();
|
|
|
|
}
|
|
|
|
$.fn.deleteProvider = function (id) {
|
|
|
|
$('#editANewznabProvider').removeOption(id);
|
|
delete newznabProviders[id];
|
|
$(this).populateNewznabSection();
|
|
$('li').remove('#'+id);
|
|
$(this).makeNewznabProviderString();
|
|
|
|
}
|
|
|
|
$.fn.updateTorrentRssProvider = function (id, url, cookies) {
|
|
torrentRssProviders[id][1] = url;
|
|
torrentRssProviders[id][2] = cookies;
|
|
$(this).populateTorrentRssSection();
|
|
$(this).makeTorrentRssProviderString();
|
|
}
|
|
|
|
$.fn.deleteTorrentRssProvider = function (id) {
|
|
$('#editATorrentRssProvider').removeOption(id);
|
|
delete torrentRssProviders[id];
|
|
$(this).populateTorrentRssSection();
|
|
$('li').remove('#'+id);
|
|
$(this).makeTorrentRssProviderString();
|
|
}
|
|
|
|
$.fn.populateNewznabSection = function() {
|
|
|
|
var selectedProvider = $('#editANewznabProvider :selected').val();
|
|
|
|
if (selectedProvider == 'addNewznab') {
|
|
var data = ['','',''];
|
|
var isDefault = 0;
|
|
$('#newznab_add_div').show();
|
|
$('#newznab_update_div').hide();
|
|
$('#newznab_cat').attr('disabled','disabled');
|
|
$('#newznab_cap').attr('disabled','disabled');
|
|
|
|
$("#newznab_cat option").each(function() {
|
|
$(this).remove();
|
|
return;
|
|
});
|
|
|
|
$("#newznab_cap option").each(function() {
|
|
$(this).remove();
|
|
return;
|
|
});
|
|
|
|
} else {
|
|
var data = newznabProviders[selectedProvider][1];
|
|
var isDefault = newznabProviders[selectedProvider][0];
|
|
$('#newznab_add_div').hide();
|
|
$('#newznab_update_div').show();
|
|
$('#newznab_cat').removeAttr("disabled");
|
|
$('#newznab_cap').removeAttr("disabled");
|
|
}
|
|
|
|
$('#newznab_name').val(data[0]);
|
|
$('#newznab_url').val(data[1]);
|
|
$('#newznab_key').val(data[2]);
|
|
|
|
//Check if not already array
|
|
if (typeof data[3] === 'string') {
|
|
rrcat = data[3].split(",")
|
|
}
|
|
else {
|
|
rrcat = data[3];
|
|
}
|
|
|
|
// Update the category select box (on the right)
|
|
var newCatOptions = [];
|
|
if (rrcat) {
|
|
rrcat.forEach(function (cat) {
|
|
newCatOptions.push({text : cat, value : cat});
|
|
});
|
|
$("#newznab_cat").replaceOptions(newCatOptions);
|
|
};
|
|
|
|
if (selectedProvider == 'addNewznab') {
|
|
$('#newznab_name').removeAttr("disabled");
|
|
$('#newznab_url').removeAttr("disabled");
|
|
} else {
|
|
|
|
$('#newznab_name').attr("disabled", "disabled");
|
|
|
|
if (isDefault) {
|
|
$('#newznab_url').attr("disabled", "disabled");
|
|
$('#newznab_delete').attr("disabled", "disabled");
|
|
} else {
|
|
$('#newznab_url').removeAttr("disabled");
|
|
$('#newznab_delete').removeAttr("disabled");
|
|
|
|
//Get Categories Capabilities
|
|
if (data[0] && data[1] && data[2] && !ifExists($.fn.newznabProvidersCapabilities, data[0])) {
|
|
$(this).getCategories(isDefault, data);
|
|
}
|
|
else {
|
|
updateNewznabCaps( null, data );
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
ifExists = function(loopThroughArray, searchFor) {
|
|
var found = false;
|
|
|
|
loopThroughArray.forEach(function(rootObject) {
|
|
if (rootObject.name == searchFor) {
|
|
found = true;
|
|
}
|
|
console.log(rootObject.name + " while searching for: "+ searchFor);
|
|
});
|
|
return found;
|
|
};
|
|
|
|
/**
|
|
* Updates the Global array $.fn.newznabProvidersCapabilities with a combination of newznab prov name
|
|
* and category capabilities. Return
|
|
* @param {Array} newzNabCaps, is the returned object with newzNabprod Name and Capabilities.
|
|
* @param {Array} selectedProvider
|
|
* @return no return data. The multiselect input $("#newznab_cap") is updated, as a result.
|
|
*/
|
|
updateNewznabCaps = function( newzNabCaps, selectedProvider ) {
|
|
|
|
if (newzNabCaps && !ifExists($.fn.newznabProvidersCapabilities, selectedProvider[0])) {
|
|
$.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories});
|
|
}
|
|
|
|
//Loop through the array and if currently selected newznab provider name matches one in the array, use it to
|
|
//update the capabilities select box (on the left).
|
|
if (selectedProvider[0]) {
|
|
$.fn.newznabProvidersCapabilities.forEach(function(newzNabCap) {
|
|
|
|
if (newzNabCap.name && newzNabCap.name == selectedProvider[0] && newzNabCap.categories instanceof Array) {
|
|
var newCapOptions = [];
|
|
newzNabCap.categories.forEach(function(category_set) {
|
|
if (category_set.id && category_set.name) {
|
|
newCapOptions.push({value : category_set.id, text : category_set.name + "(" + category_set.id + ")"});
|
|
};
|
|
});
|
|
$("#newznab_cap").replaceOptions(newCapOptions);
|
|
}
|
|
|
|
});
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
$.fn.makeNewznabProviderString = function() {
|
|
|
|
var provStrings = new Array();
|
|
|
|
for (var id in newznabProviders) {
|
|
provStrings.push(newznabProviders[id][1].join('|'));
|
|
}
|
|
|
|
$('#newznab_string').val(provStrings.join('!!!'))
|
|
|
|
}
|
|
|
|
$.fn.populateTorrentRssSection = function() {
|
|
|
|
var selectedProvider = $('#editATorrentRssProvider :selected').val();
|
|
|
|
if (selectedProvider == 'addTorrentRss') {
|
|
var data = ['','',''];
|
|
$('#torrentrss_add_div').show();
|
|
$('#torrentrss_update_div').hide();
|
|
} else {
|
|
var data = torrentRssProviders[selectedProvider];
|
|
$('#torrentrss_add_div').hide();
|
|
$('#torrentrss_update_div').show();
|
|
}
|
|
|
|
$('#torrentrss_name').val(data[0]);
|
|
$('#torrentrss_url').val(data[1]);
|
|
$('#torrentrss_cookies').val(data[2]);
|
|
|
|
if (selectedProvider == 'addTorrentRss') {
|
|
$('#torrentrss_name').removeAttr("disabled");
|
|
$('#torrentrss_url').removeAttr("disabled");
|
|
$('#torrentrss_cookies').removeAttr("disabled");
|
|
} else {
|
|
$('#torrentrss_name').attr("disabled", "disabled");
|
|
$('#torrentrss_url').removeAttr("disabled");
|
|
$('#torrentrss_cookies').removeAttr("disabled");
|
|
$('#torrentrss_delete').removeAttr("disabled");
|
|
}
|
|
|
|
}
|
|
|
|
$.fn.makeTorrentRssProviderString = function() {
|
|
|
|
var provStrings = new Array();
|
|
for (var id in torrentRssProviders) {
|
|
provStrings.push(torrentRssProviders[id].join('|'));
|
|
}
|
|
|
|
$('#torrentrss_string').val(provStrings.join('!!!'))
|
|
|
|
}
|
|
|
|
|
|
$.fn.refreshProviderList = function() {
|
|
var idArr = $("#provider_order_list").sortable('toArray');
|
|
var finalArr = new Array();
|
|
$.each(idArr, function(key, val) {
|
|
var checked = + $('#enable_'+val).prop('checked') ? '1' : '0';
|
|
finalArr.push(val + ':' + checked);
|
|
});
|
|
|
|
$("#provider_order").val(finalArr.join(' '));
|
|
}
|
|
|
|
$.fn.hideConfigTab = function () {
|
|
|
|
$("#config-components").tabs( "disable", 1 );
|
|
$("#config-components ul li:eq(1)").hide();
|
|
|
|
};
|
|
|
|
$.fn.showProvidersConfig = function () {
|
|
|
|
$("#provider_order_list li").each(function( index ) {
|
|
|
|
if ($(this).find("input").attr("checked")) {
|
|
$(this).addTip();
|
|
} else {
|
|
$(this).qtip('destroy');
|
|
}
|
|
});
|
|
};
|
|
|
|
$.fn.addTip = function() {
|
|
|
|
var config_id = $(this).find("input").attr('id').replace("enable_", "") + "Div";
|
|
var config_form = '<div id="config"><form id="configForm_tip" action="saveProviders" method="post"><fieldset class="component-group-list tip_scale"><div class="providerDiv_tip">' + $("div[id*="+config_id+"]").html() + '</div></fieldset></form></div>'
|
|
var provider_name = $.trim($(this).text()).replace('*','')
|
|
|
|
if ($("div[id*="+config_id+"]").length == 0) {
|
|
return false
|
|
}
|
|
|
|
$(this).qtip({
|
|
|
|
overwrite: true,
|
|
position: {
|
|
adjust: {
|
|
x: 0, y: 0,
|
|
},
|
|
my: 'left top',
|
|
at: 'top right',
|
|
},
|
|
show: {
|
|
event: 'mouseenter', // Show it on click...
|
|
target: false,
|
|
solo: true,
|
|
delay: 90,
|
|
effect: true,
|
|
},
|
|
hide: {
|
|
fixed: true,
|
|
delay: 900,
|
|
},
|
|
content: {
|
|
text: config_form,
|
|
title: {
|
|
text: provider_name + ' Config',
|
|
button: true
|
|
}
|
|
},
|
|
style: {
|
|
border: {
|
|
width: 5,
|
|
radius: 2,
|
|
color: '#e1e1e1'
|
|
},
|
|
width: 350,
|
|
background: '#FFF',
|
|
padding: 15,
|
|
tip: true, // Give it a speech bubble tip with automatic corner detection
|
|
classes: 'qtip-dark qtip-shadow',
|
|
},
|
|
});
|
|
|
|
}
|
|
|
|
var newznabProviders = new Array();
|
|
var torrentRssProviders = new Array();
|
|
|
|
$("#provider_order_list li").on('change', function() {
|
|
if ($(this).find("input").attr("checked")) {
|
|
$(this).addTip();
|
|
$(this).qtip('show');
|
|
} else {
|
|
$(this).qtip('destroy');
|
|
}
|
|
});
|
|
|
|
$(this).on('change', '.newznab_key', function(){
|
|
|
|
var provider_id = $(this).attr('id');
|
|
provider_id = provider_id.substring(0, provider_id.length-'_hash'.length);
|
|
|
|
var url = $('#'+provider_id+'_url').val();
|
|
var cat = $('#'+provider_id+'_cat').val();
|
|
var key = $(this).val();
|
|
|
|
$(this).updateProvider(provider_id, url, key, cat);
|
|
|
|
});
|
|
|
|
$('#newznab_key,#newznab_url').change(function(){
|
|
|
|
var selectedProvider = $('#editANewznabProvider :selected').val();
|
|
|
|
if (selectedProvider == "addNewznab")
|
|
return;
|
|
|
|
var url = $('#newznab_url').val();
|
|
var key = $('#newznab_key').val();
|
|
|
|
var cat = $('#newznab_cat option').map(function(i, opt) {
|
|
return $(opt).text();
|
|
}).toArray().join(',');
|
|
|
|
$(this).updateProvider(selectedProvider, url, key, cat);
|
|
|
|
});
|
|
|
|
$('#torrentrss_url,#torrentrss_cookies').change(function(){
|
|
|
|
var selectedProvider = $('#editATorrentRssProvider :selected').val();
|
|
|
|
if (selectedProvider == "addTorrentRss")
|
|
return;
|
|
|
|
var url = $('#torrentrss_url').val();
|
|
var cookies = $('#torrentrss_cookies').val();
|
|
|
|
$(this).updateTorrentRssProvider(selectedProvider, url, cookies);
|
|
});
|
|
|
|
|
|
$('#editAProvider').change(function(){
|
|
$(this).showHideProviders();
|
|
});
|
|
|
|
$('#editANewznabProvider').change(function(){
|
|
$(this).populateNewznabSection();
|
|
});
|
|
|
|
$('#editATorrentRssProvider').change(function(){
|
|
$(this).populateTorrentRssSection();
|
|
});
|
|
|
|
$(this).on('click', '.provider_enabler', function(){
|
|
$(this).refreshProviderList();
|
|
});
|
|
|
|
$(this).on('click', '#newznab_cat_update', function(){
|
|
console.debug('Clicked Button');
|
|
|
|
//Maybe check if there is anything selected?
|
|
$("#newznab_cat option").each(function() {
|
|
$(this).remove();
|
|
return;
|
|
});
|
|
|
|
var newOptions = [];
|
|
|
|
// When the update botton is clicked, loop through the capabilities list
|
|
// and copy the selected category id's to the category list on the right.
|
|
$("#newznab_cap option").each(function(){
|
|
if($(this).attr('selected') == 'selected')
|
|
{
|
|
var selected_cat = $(this).val();
|
|
console.debug(selected_cat);
|
|
newOptions.push({text: selected_cat, value: selected_cat})
|
|
};
|
|
});
|
|
|
|
$("#newznab_cat").replaceOptions(newOptions);
|
|
|
|
var selectedProvider = $('#editANewznabProvider :selected').val();
|
|
if (selectedProvider == "addNewznab")
|
|
return;
|
|
|
|
var url = $('#newznab_url').val();
|
|
var key = $('#newznab_key').val();
|
|
|
|
var cat = $('#newznab_cat option').map(function(i, opt) {
|
|
return $(opt).text();
|
|
}).toArray().join(',');
|
|
|
|
$("#newznab_cat option:not([value])").remove();
|
|
|
|
$(this).updateProvider(selectedProvider, url, key, cat);
|
|
|
|
});
|
|
|
|
|
|
$('#newznab_add').click(function(){
|
|
|
|
var selectedProvider = $('#editANewznabProvider :selected').val();
|
|
|
|
var name = $.trim($('#newznab_name').val());
|
|
var url = $.trim($('#newznab_url').val());
|
|
var key = $.trim($('#newznab_key').val());
|
|
//var cat = $.trim($('#newznab_cat').val());
|
|
|
|
var cat = $.trim($('#newznab_cat option').map(function(i, opt) {
|
|
return $(opt).text();}).toArray().join(','));
|
|
|
|
|
|
if (!name)
|
|
return;
|
|
|
|
if (!url)
|
|
return;
|
|
|
|
if (!key)
|
|
return;
|
|
|
|
var params = {name: name};
|
|
|
|
// send to the form with ajax, get a return value
|
|
$.getJSON(sbRoot + '/config/providers/canAddNewznabProvider', params,
|
|
function(data){
|
|
if (data.error != undefined) {
|
|
alert(data.error);
|
|
return;
|
|
}
|
|
|
|
$(this).addProvider(data.success, name, url, key, cat, 0);
|
|
});
|
|
|
|
});
|
|
|
|
$('.newznab_delete').click(function(){
|
|
|
|
var selectedProvider = $('#editANewznabProvider :selected').val();
|
|
|
|
$(this).deleteProvider(selectedProvider);
|
|
|
|
});
|
|
|
|
$('#torrentrss_add').click(function(){
|
|
var selectedProvider = $('#editATorrentRssProvider :selected').val();
|
|
|
|
var name = $('#torrentrss_name').val();
|
|
var url = $('#torrentrss_url').val();
|
|
var cookies = $('#torrentrss_cookies').val();
|
|
var params = { name: name, url: url, cookies: cookies}
|
|
|
|
// send to the form with ajax, get a return value
|
|
$.getJSON(sbRoot + '/config/providers/canAddTorrentRssProvider', params,
|
|
function(data){
|
|
if (data.error != undefined) {
|
|
alert(data.error);
|
|
return;
|
|
}
|
|
|
|
$(this).addTorrentRssProvider(data.success, name, url, cookies);
|
|
});
|
|
});
|
|
|
|
$('.torrentrss_delete').on('click', function(){
|
|
var selectedProvider = $('#editATorrentRssProvider :selected').val();
|
|
$(this).deleteTorrentRssProvider(selectedProvider);
|
|
});
|
|
|
|
|
|
$(this).on('change', "[class='providerDiv_tip'] input", function(){
|
|
$('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").replaceWith($(this).clone());
|
|
$('div .providerDiv ' + "[newznab_name=" + $(this).attr('id') + "]").replaceWith($(this).clone());
|
|
});
|
|
|
|
$(this).on('change', "[class='providerDiv_tip'] select", function(){
|
|
|
|
$(this).find('option').each( function() {
|
|
if ($(this).is(':selected')) {
|
|
$(this).prop('defaultSelected', true)
|
|
} else {
|
|
$(this).prop('defaultSelected', false);
|
|
}
|
|
});
|
|
|
|
$('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").empty().replaceWith($(this).clone())});
|
|
|
|
$(this).on('change', '.enabler', function(){
|
|
if ($(this).is(':checked')) {
|
|
$('.content_'+$(this).attr('id')).each( function() {
|
|
$(this).show()
|
|
})
|
|
} else {
|
|
$('.content_'+$(this).attr('id')).each( function() {
|
|
$(this).hide()
|
|
})
|
|
}
|
|
});
|
|
|
|
$(".enabler").each(function(){
|
|
if (!$(this).is(':checked')) {
|
|
$('.content_'+$(this).attr('id')).hide();
|
|
} else {
|
|
$('.content_'+$(this).attr('id')).show();
|
|
}
|
|
});
|
|
|
|
$.fn.makeTorrentOptionString = function(provider_id) {
|
|
|
|
var seed_ratio = $('.providerDiv_tip #'+provider_id+'_seed_ratio').prop('value');
|
|
var seed_time = $('.providerDiv_tip #'+provider_id+'_seed_time').prop('value');
|
|
var process_met = $('.providerDiv_tip #'+provider_id+'_process_method').prop('value');
|
|
var option_string = $('.providerDiv_tip #'+provider_id+'_option_string');
|
|
|
|
option_string.val([seed_ratio, seed_time, process_met].join('|'))
|
|
|
|
}
|
|
|
|
$(this).on('change', '.seed_option', function(){
|
|
|
|
var provider_id = $(this).attr('id').split('_')[0];
|
|
|
|
$(this).makeTorrentOptionString(provider_id);
|
|
|
|
});
|
|
|
|
|
|
$.fn.replaceOptions = function(options) {
|
|
var self, $option;
|
|
|
|
this.empty();
|
|
self = this;
|
|
|
|
$.each(options, function(index, option) {
|
|
$option = $("<option></option>")
|
|
.attr("value", option.value)
|
|
.text(option.text);
|
|
self.append($option);
|
|
});
|
|
};
|
|
|
|
// initialization stuff
|
|
|
|
|
|
$.fn.newznabProvidersCapabilities = [];
|
|
|
|
$(this).hideConfigTab();
|
|
|
|
$(this).showHideProviders();
|
|
|
|
$(this).showProvidersConfig();
|
|
|
|
$("#provider_order_list").sortable({
|
|
placeholder: 'ui-state-highlight',
|
|
update: function (event, ui) {
|
|
$(this).refreshProviderList();
|
|
ui.item.qtip('reposition');
|
|
}
|
|
});
|
|
|
|
$("#provider_order_list").disableSelection();
|
|
|
|
}); |