mirror of
https://github.com/SickGear/SickGear.git
synced 2024-12-04 10:23:37 +00:00
000467cc73
Added gui for selecting categories from multiselect box. Created some helper function in js, for dynamically modifying selects/options Made results of function for retrieving newznab capabilities more generic. In that now always a valid json is returned with success,tv_categories,error Added gui elements for retrieving and displaying newznab capabilities Added backend functions for calling ajax /getNewznabCategories?name=yourNewznabProvider&url=https://newznabprovURL&key=YourApiKey Returns json.dumps() with TV category capabilities of newznab provider. Is going to be used for new gui element in adding newsnab provider.
664 lines
No EOL
20 KiB
JavaScript
664 lines
No EOL
20 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();
|
|
|
|
});
|
|
}
|
|
|
|
|
|
$.fn.getCategories = function (isDefault, name, url, key) {
|
|
|
|
if (!name)
|
|
return;
|
|
|
|
if (!url)
|
|
return;
|
|
|
|
if (!key)
|
|
return;
|
|
|
|
var params = {url: url, name: name, key: key};
|
|
var returnData;
|
|
|
|
$.ajaxSetup( { "async": false } );
|
|
$.getJSON(sbRoot + '/config/providers/getNewznabCategories', params,
|
|
function(data){
|
|
if (data.error != "") {
|
|
alert(data.error);
|
|
return false;
|
|
}
|
|
|
|
if (data.success == false) {
|
|
return false;
|
|
}
|
|
|
|
console.debug(data.tv_categories);
|
|
returnData = data;
|
|
});
|
|
$.ajaxSetup( { "async": true } );
|
|
return returnData;
|
|
}
|
|
|
|
$.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])) {
|
|
var categoryresult = $(this).getCategories(isDefault, data[0], data[1], data[2]);
|
|
if (categoryresult && categoryresult.success && categoryresult.tv_categories) {
|
|
$.fn.newznabProvidersCapabilities.push({'name' : data[0], 'categories' : categoryresult.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 (data[0]) {
|
|
$.fn.newznabProvidersCapabilities.forEach(function(newzNabCap) {
|
|
|
|
if (newzNabCap.name && newzNabCap.name == data[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);
|
|
}
|
|
|
|
});
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
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;
|
|
};
|
|
|
|
$.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();
|
|
|
|
}); |