$(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 + ' ' + 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 + ' ' + 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(); });