$(document).ready(function(){
$.sgd = !1;
$.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 );
});
}
$.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 = '
' + name + ''
$('#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 = ' ' + name + ''
$('#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;
}
});
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
.sort(function(a, b){return a.name > b.name})})
}
$.sgd && console.log(selectedProvider);
//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]) {
var newCapOptions = [], catName = '', hasCats = false;
if ($.fn.newznabProvidersCapabilities.length) {
$.fn.newznabProvidersCapabilities.forEach(function (newzNabCap) {
$.sgd && console.log('array found:' + (newzNabCap.categories instanceof Array ? 'yes': 'no'));
if (newzNabCap.name && newzNabCap.name == selectedProvider[0] && newzNabCap.categories instanceof Array) {
newzNabCap.categories.forEach(function (category_set) {
if (category_set.id && category_set.name) {
catName = category_set.name.replace(/Docu([^\w]|$)(.*?)/i, 'Documentary$1');
newCapOptions.push({
value: category_set.id,
text: catName + ' (' + category_set.id + ')'
});
}
});
$('#newznab_cap').replaceOptions(newCapOptions);
hasCats = !!newCapOptions.length
}
});
$('#nn-loadcats').removeClass('show').addClass('hide');
if (hasCats) {
$.sgd && console.log('hasCats');
$('#nn-nocats').removeClass('show').addClass('hide');
$('#nn-cats').removeClass('hide').addClass('show');
} else {
$.sgd && console.log('noCats');
$('#nn-cats').removeClass('show').addClass('hide');
$('#nn-nocats').removeClass('hide').addClass('show');
}
} else {
$.sgd && console.log('errCats');
// error - no caps
$('#nn-cats').removeClass('show').addClass('hide');
$('#nn-nocats').removeClass('show').addClass('hide');
$('#nn-loadcats').removeClass('hide').addClass('show');
}
}
}
$.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(' '));
}
var newznabProviders = new Array();
var torrentRssProviders = new Array();
$(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(){
//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();
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 = $('')
.attr('value', option.value)
.text(option.text);
self.append($option);
});
};
// initialization stuff
$.fn.newznabProvidersCapabilities = [];
$(this).showHideProviders();
$('#provider_order_list').sortable({
placeholder: 'ui-state-highlight',
update: function (event, ui) {
$(this).refreshProviderList();
}
});
$('#provider_order_list').disableSelection();
});