$(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 != "") { 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 = '
  • '+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])) { 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_id+"]").html() + '
    ' 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 = $("") .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(); }); });