#import sickgear #from sickgear.clients import get_client_instance #from sickgear.providers.generic import GenericProvider #from sickgear.providers import thepiratebay #from sickgear.providers.newznab import NewznabConstants #from sickgear.helpers import anon_url, maybe_plural, starify #from six import iteritems ## #set global $title = 'Config - Providers' #set global $header = 'Media Providers' #set global $sbPath = '../..' #set global $topmenu = 'config' ## #import os.path #include $os.path.join($sickgear.PROG_DIR, 'gui/slick/interfaces/default/inc_top.tmpl') #if $varExists('header') <h1 class="header">$header</h1> #else <h1 class="title">$title</h1> #end if <script type="text/javascript" src="$sbRoot/js/configProviders.js?v=$sbPID"></script> <script type="text/javascript" src="$sbRoot/js/config.js?v=$sbPID"></script> #set $methods_notused = [] #if not $sickgear.USE_NZBS $methods_notused.append('Newznab') #end if #if not $sickgear.USE_TORRENTS $methods_notused.append('Torrent') #end if #slurp #if $sickgear.USE_NZBS or $sickgear.USE_TORRENTS <script type="text/javascript" charset="utf-8"> <!-- \$(document).ready(function(){ #if $sickgear.USE_NZBS #for $cur_newznab_provider in $sickgear.newznab_providers: \$(this).addProvider('$cur_newznab_provider.get_id()', '$cur_newznab_provider.name', '$cur_newznab_provider.url', '<%= starify(cur_newznab_provider.key) %>', '$cur_newznab_provider.cat_ids', $int($cur_newznab_provider.default), !0); #end for #end if #if $sickgear.USE_TORRENTS #for $cur_torrent_rss_provider in $sickgear.torrent_rss_providers: \$(this).addTorrentRssProvider('$cur_torrent_rss_provider.get_id()', '$cur_torrent_rss_provider.name', '$cur_torrent_rss_provider.url', '<%= starify(cur_torrent_rss_provider.cookies) %>'); #end for #end if }); //--> </script> #end if ## #set $html_selected = ' selected="selected"' #set $html_checked = 'checked="checked" ' #set $backlog_only_tip = False <div id="config" class="search_providers"> <div id="config-content"> <form id="configForm" action="save_providers" method="post"> $xsrf_form_html <div id="config-components"> <ul> <li><a href="#core-component-group1">Priorities</a></li> <li><a href="#core-component-group2">Options</a></li> #if $sickgear.USE_NZBS <li><a href="#core-component-group3">Custom Newznab</a></li> #end if #if $sickgear.USE_TORRENTS <li><a href="#core-component-group4">Custom Torrent</a></li> #end if </ul> <div id="core-component-group1" class="component-group"> <fieldset class="component-group-list"> #set $dupe_keys = $GenericProvider.dedupe_auths() #if $dupe_keys <div style="background-color:#a00; margin-bottom:10px"> <p style="padding:5px">$len($dupe_keys) duplicate api/pass key$maybe_plural($len($dupe_keys)) found at providers: #for $dupe in $dupe_keys ($dupe[0] = $dupe[1]) #end for <br>Best security practice is to have unique keys for every provider</p> </div> #end if <div class="component-group-desc"> <h3>Priorities</h3> <p>Allows searching recent and past releases.</p> <p>Check off and drag providers into the order you want them to be used.</p> <p>At least one provider is required, two are recommended.</p> #if $methods_notused <blockquote style="margin:20px 0"><%= '/'.join(x for x in methods_notused) %> providers can be enabled in <a href="$sbRoot/config/search/">Search Settings</a></blockquote> #else <br/> #end if </div> <ul id="provider_order_list" class="provider_order_panel"> #for $cur_provider in [$x for $x in $sickgear.providers.sorted_sources() if $x.providerType == $GenericProvider.NZB and $sickgear.USE_NZBS or $x.providerType == $GenericProvider.TORRENT and $sickgear.USE_TORRENTS] #set $cur_name = $cur_provider.get_id() #set $cur_url = $cur_provider.url #set $show_type = $sickgear.USE_NZBS and $sickgear.USE_TORRENTS and $GenericProvider.NZB == $cur_provider.providerType #set $spotweb = ('', 'sw ')[$getattr($cur_provider, 'server_type', None) == $NewznabConstants.SERVER_SPOTWEB and type($cur_provider).__name__ not in ['TorrentRssProvider']] #set $is_hydra = $getattr($cur_provider, 'server_type', None) in ($NewznabConstants.SERVER_HYDRA1, $NewznabConstants.SERVER_HYDRA2) #set $bad_url = not $cur_url and cur_provider.is_enabled() #set $tip = ($cur_provider.name + ('', ' (enable for link)')[not $cur_url and not cur_provider.is_enabled()], 'Site Down')[$bad_url] #set $state = ('', ' <span class="red-text">(Site Down?)</span>')[$bad_url] <li class="ui-state-default row-#echo ('odd', 'even')[$show_type or not $sickgear.USE_TORRENTS]##echo ('', ' provider-enabled')[$cur_provider.is_enabled()]#" id="$cur_name"> <input type="checkbox" id="enable_$cur_name" class="provider_enabler" <%= html_checked if cur_provider.is_enabled() else '' %>/> <a class="imgLink" #if $cur_url#href="<%= anon_url(cur_url) %>" onclick="window.open(this.href,'_blank');return false;"#else#name=""#end if# rel="noreferrer"><img src="$sbRoot/images/providers/$cur_provider.image_name()" alt="$tip" title="$tip" width="16" height="16" style="vertical-align:middle" /></a> <span style="vertical-align:middle">$cur_provider.name$state</span> #if $cur_provider.is_public_access() and type($cur_provider).__name__ not in ['TorrentRssProvider']# <span style="font-size:10px;vertical-align:top;font-weight:normal">(PA)</span> #end if##if $show_type##slurp <span style="font-size:10px;vertical-align:top;font-weight:normal">($spotweb$cur_provider.providerType)</span> #end if##if $is_hydra##slurp (<a href="https://github.com/SickGear/SickGear/wiki/%5BWarning%5D-Using-External-Search-Tools" target="_blank" title="This tool degrades SickGear"><span class="red-text">read this</span></a>) #end if##if not $cur_provider.supports_backlog#*#set $backlog_only_tip=True##end if##slurp <span class="ui-icon ui-icon-arrowthick-2-n-s pull-right" style="margin-top:3px"></span> </li> #end for </ul> <input type="hidden" name="provider_order" id="provider_order" value="<%=' '.join([x.get_id()+':'+str(int(x.is_enabled())) for x in sickgear.providers.sorted_sources()])%>"/> #if $sickgear.USE_NZBS or $sickgear.USE_TORRENTS <div id="provider_key"> <span style="float:left;font-size:10px;vertical-align:top;font-weight:normal">(PA)</span><p class="note">Public access, no account required</p> #if $backlog_only_tip <h4 class="note">*</h4><p class="note">No backlog, latest releases only</p> #end if ## #if $sickgear.USE_TORRENTS ## <h4 class="note">**</h4><p class="note">Supports <b>limited</b> backlog searches, some episodes/qualities may not be available</p> ## #end if ##<h4 class="note">!</h4><p class="note">Provider is <b>NOT WORKING</b></p> </div> <div style="width: 300px; float: right"> <div style="margin: 0px auto; width: 101px"> <input type="submit" class="btn config_submitter" value="Save Changes" /> </div> </div> #end if </fieldset> </div><!-- /component-group1 //--> <div id="core-component-group2" class="component-group"> <div class="component-group-desc"> <h3>Options</h3> <p>Individual provider settings.</p> </div> <fieldset class="component-group-list"> <div class="field-pair"> <label for="editAProvider"> <span class="component-title">Configure provider:</span> <span class="component-desc"> #set $provider_config_list_enabled = [] #set $provider_config_list = [] #for $cur_provider in [$x for $x in $sickgear.providers.sorted_sources() if $x.providerType == $GenericProvider.NZB and $sickgear.USE_NZBS or $x.providerType == $GenericProvider.TORRENT and $sickgear.USE_TORRENTS] #if $cur_provider.is_enabled() #set void = $provider_config_list_enabled.append($cur_provider) #else #set void = $provider_config_list.append($cur_provider) #end if #end for #if $provider_config_list + $provider_config_list_enabled <select id="editAProvider" class="form-control input-sm"> #if $provider_config_list_enabled <optgroup label="Enabled..."> #for $cur_provider in $provider_config_list_enabled: <option value="$cur_provider.get_id()">$cur_provider.name</option> #end for </optgroup> #end if #if $provider_config_list <optgroup label="Not Enabled..."> #for $cur_provider in $provider_config_list <option value="$cur_provider.get_id()">$cur_provider.name</option> #end for </optgroup> #end if </select><p>note: must refresh browser after saving enabled providers for an up to date list</p> #else <p>No providers available to configure</p> #end if </span> </label> </div> <!-- start div for editing providers //--> #set $recentsearch_tip = 'passively match recent episodes from latest releases' #set $backlogsearch_tip = 'allow active searching for individual episode releases' #set $scheduled_backlog_tip = 'enable scheduled searching for backlogged episodes' #set $filter_title = 'Only allow releases that are' #set $filter_scene_only_desc = 'scene releases (srrDB/predb listed)' #set $filter_scene_or_contain_desc = '...or contain' #set $filter_scene_loose_desc = 'non scene if no recent search results' #set $filter_scene_loose_active_desc = 'non scene if no active search results' #set $filter_scene_rej_nuked_desc = 'not scene nuked' #set $filter_scene_nuked_active_desc = 'nuked if no active search results' #set $filter_tip = 'nothing selected allows everything (i.e. no filtering, default)' #for $cur_newznab_provider in [$cur_provider for $cur_provider in $sickgear.newznab_providers] <div class="providerDiv" id="${cur_newznab_provider.get_id()}Div"> #set $can_recent = $hasattr($cur_newznab_provider, 'enable_recentsearch') #set $can_backlog = $hasattr($cur_newznab_provider, 'enable_backlog') #set $can_schedule_backlog = $hasattr($cur_newznab_provider, 'enable_scheduled_backlog') #if $cur_newznab_provider.supports_backlog and ($can_recent or $can_backlog or $can_schedule_backlog) <div class="field-pair"> <span class="component-title">Perform search tasks</span> <span class="component-desc"> #if $can_recent <label for="${cur_newznab_provider.get_id()}_enable_recentsearch" style="display:inline"> <input class="view-if" type="checkbox" name="${cur_newznab_provider.get_id()}_enable_recentsearch" id="${cur_newznab_provider.get_id()}_enable_recentsearch" <%= html_checked if cur_newznab_provider.enable_recentsearch else '' %>/> <p>$recentsearch_tip</p> </label> #end if #if $can_backlog <label for="${cur_newznab_provider.get_id()}_enable_backlog" style="display:inline"> <input class="enabler view-if" type="checkbox" name="${cur_newznab_provider.get_id()}_enable_backlog" id="${cur_newznab_provider.get_id()}_enable_backlog" <%= html_checked if cur_newznab_provider.enable_backlog else '' %>/> <p>$backlogsearch_tip</p> </label> #end if #if $can_schedule_backlog <div id="content_${cur_newznab_provider.get_id()}_enable_backlog"> <label for="${cur_newznab_provider.get_id()}_enable_scheduled_backlog" style="display:inline"> <input type="checkbox" name="${cur_newznab_provider.get_id()}_enable_scheduled_backlog" id="${cur_newznab_provider.get_id()}_enable_scheduled_backlog" <%= html_checked if cur_newznab_provider.enable_scheduled_backlog else '' %>/> <p>$scheduled_backlog_tip</p> </label> </div> #end if </span> </div> #end if #if $cur_newznab_provider.default and $cur_newznab_provider.needs_auth <div class="field-pair"> <label for="${cur_newznab_provider.get_id()}_url"> <span class="component-title">URL</span> <span class="component-desc"> <input type="text" id="${cur_newznab_provider.get_id()}_url" value="$cur_newznab_provider.url" class="form-control input-sm input350" disabled/> </span> </label> </div> <div class="field-pair"> <label for="${cur_newznab_provider.get_id()}_hash"> <span class="component-title">API key</span> <span class="component-desc"> <input type="text" id="${cur_newznab_provider.get_id()}_hash" value="<%= starify(cur_newznab_provider.key) %>" newznab_name="${cur_newznab_provider.get_id()}_hash" class="newznab_key form-control input-sm input350" /> <div class="clear-left"><p><code>apikey</code> for API only or <code>i=num&r=key</code> for API + RSS cache fallback</p></div> </span> </label> </div> #end if <div class="field-pair"> <span class="component-title">$filter_title</span> <span class="component-desc"> <div style="margin-bottom:10px"> <div style="float:left;max-width:230px"> <label for="${cur_newznab_provider.get_id()}_scene_only"> <input type="checkbox" name="${cur_newznab_provider.get_id()}_scene_only" id="${cur_newznab_provider.get_id()}_scene_only" <%= html_checked if cur_newznab_provider.scene_only else '' %>> <span>$filter_scene_only_desc</span> </label> <label for="${cur_newznab_provider.get_id()}_scene_or_contain"> $filter_scene_or_contain_desc<input style="float:right;margin-left:4px;padding:2px 4px;height:24px;width:144px" type="text" name="${cur_newznab_provider.get_id()}_scene_or_contain" placeholder="(opt: start 'regex:')" value="<%= cur_newznab_provider.scene_or_contain %>" class="form-control input-sm input150"> </label> </div> <div style="margin-left:230px"> <label class="show-if-${cur_newznab_provider.get_id()}_enable_recentsearch" for="${cur_newznab_provider.get_id()}_scene_loose"> <input type="checkbox" name="${cur_newznab_provider.get_id()}_scene_loose" id="${cur_newznab_provider.get_id()}_scene_loose" <%= html_checked if cur_newznab_provider.scene_loose else '' %>> <span>$filter_scene_loose_desc</span> </label> <label class="show-if-${cur_newznab_provider.get_id()}_enable_backlog" for="${cur_newznab_provider.get_id()}_scene_loose_active"> <input type="checkbox" name="${cur_newznab_provider.get_id()}_scene_loose_active" id="${cur_newznab_provider.get_id()}_scene_loose_active" <%= html_checked if cur_newznab_provider.scene_loose_active else '' %>> <span>$filter_scene_loose_active_desc</span> </label> </div> <div style="clear:both"> <label style="float:left;min-width:230px" for="${cur_newznab_provider.get_id()}_scene_rej_nuked"> <input type="checkbox" name="${cur_newznab_provider.get_id()}_scene_rej_nuked" id="${cur_newznab_provider.get_id()}_scene_rej_nuked" <%= html_checked if cur_newznab_provider.scene_rej_nuked else '' %>> <span>$filter_scene_rej_nuked_desc</span> </label> <label class="show-if-${cur_newznab_provider.get_id()}_enable_backlog" for="${cur_newznab_provider.get_id()}_scene_nuked_active"> <input type="checkbox" name="${cur_newznab_provider.get_id()}_scene_nuked_active" id="${cur_newznab_provider.get_id()}_scene_nuked_active" <%= html_checked if cur_newznab_provider.scene_nuked_active else '' %>> <span>$filter_scene_nuked_active_desc</span> </label> </div> </div> #if $hasattr($cur_newznab_provider, 'may_filter'): <div> #for $cur_fval, $filter in iteritems($cur_newznab_provider.may_filter) #set $cur_fname, $cur_is_default = $filter[0], $filter[1] #set $filter_id = '%s_filter_%s' % ($cur_newznab_provider.get_id(), $cur_fval) <label class="space-right"> <input type="checkbox" name="$filter_id" id="$filter_id" #echo ('', $html_checked)[$cur_fval in $cur_newznab_provider.filter]#/> <span>$cur_fname</span> </label> #end for <span>(see $cur_newznab_provider.name)</span> </div> #end if <p style="clear:both">$filter_tip</p> </span> </div> #if $hasattr($cur_newznab_provider, 'search_mode') and $cur_newznab_provider.supports_backlog: <div class="field-pair"> <span class="component-title">Episode search mode</span> <span class="component-desc"> <label class="space-right"> <input type="radio" name="${cur_newznab_provider.get_id()}_search_mode" id="${cur_newznab_provider.get_id()}_search_mode_eponly" value="eponly" <%= html_checked if 'eponly' == cur_newznab_provider.search_mode else '' %>/>episodes only (normal use) </label> <label> <input type="radio" name="${cur_newznab_provider.get_id()}_search_mode" id="${cur_newznab_provider.get_id()}_search_mode_sponly" value="sponly" <%= html_checked if 'sponly' == cur_newznab_provider.search_mode else '' %>/>season packs only </label> <p>when searching for episodes, collect single episodes or search for packs</p> </span> </div> #end if #if $hasattr($cur_newznab_provider, 'search_fallback') and $cur_newznab_provider.supports_backlog: <div class="field-pair"> <label for="${cur_newznab_provider.get_id()}_search_fallback"> <span class="component-title">Episode search fallback</span> <span class="component-desc"> <input type="checkbox" name="${cur_newznab_provider.get_id()}_search_fallback" id="${cur_newznab_provider.get_id()}_search_fallback" <%= html_checked if cur_newznab_provider.search_fallback else '' %>/> <p>use the alternate episode search mode if no match is found -- warning; may result in a heavy block hit -- best use: manually collect a season, disable after.</p> </span> </label> </div> #end if </div> #end for ## ## #for $cur_nzb_provider in [$cur_provider for $cur_provider in $sickgear.providers.sorted_sources() if $cur_provider.providerType == $GenericProvider.NZB and $cur_provider not in $sickgear.newznab_providers]: <div class="providerDiv" id="${cur_nzb_provider.get_id()}Div"> #set $can_recent = $hasattr($cur_nzb_provider, 'enable_recentsearch') #set $can_backlog = $hasattr($cur_nzb_provider, 'enable_backlog') #set $can_schedule_backlog = $hasattr($cur_nzb_provider, 'enable_scheduled_backlog') #if $cur_nzb_provider.supports_backlog and ($can_recent or $can_backlog or $can_schedule_backlog) <div class="field-pair"> <span class="component-title">Perform search tasks</span> <span class="component-desc"> #if $can_recent <label for="${cur_nzb_provider.get_id()}_enable_recentsearch" style="display:inline"> <input class="view-if" type="checkbox" name="${cur_nzb_provider.get_id()}_enable_recentsearch" id="${cur_nzb_provider.get_id()}_enable_recentsearch" <%= html_checked if cur_nzb_provider.enable_recentsearch else '' %>/> <p>$recentsearch_tip</p> </label> #end if #if $can_backlog <label for="${cur_nzb_provider.get_id()}_enable_backlog" style="display:inline"> <input class="enabler view-if" type="checkbox" name="${cur_nzb_provider.get_id()}_enable_backlog" id="${cur_nzb_provider.get_id()}_enable_backlog" <%= html_checked if cur_nzb_provider.enable_backlog else '' %>/> <p>$backlogsearch_tip</p> </label> #end if #if $can_schedule_backlog <div id="content_${cur_nzb_provider.get_id()}_enable_backlog"> <label for="${cur_nzb_provider.get_id()}_enable_scheduled_backlog" style="display:inline"> <input type="checkbox" name="${cur_nzb_provider.get_id()}_enable_scheduled_backlog" id="${cur_nzb_provider.get_id()}_enable_scheduled_backlog" <%= html_checked if cur_nzb_provider.enable_scheduled_backlog else '' %>/> <p>$scheduled_backlog_tip</p> </label> </div> #end if </span> </div> #end if #if $hasattr($cur_nzb_provider, 'username'): <div class="field-pair"> <label for="${cur_nzb_provider.get_id()}_username"> <span class="component-title">Username</span> <span class="component-desc"> <input type="text" name="${cur_nzb_provider.get_id()}_username" value="$cur_nzb_provider.username" class="form-control input-sm input350" /> </span> </label> </div> #end if #if $hasattr($cur_nzb_provider, 'api_key'): <div class="field-pair"> <label for="${cur_nzb_provider.get_id()}_api_key"> <span class="component-title">API key</span> <span class="component-desc"> #set $field_name = cur_nzb_provider.get_id() + '_api_key' <input type="text" name="$field_name" value="<%= starify(cur_nzb_provider.api_key) %>" class="form-control input-sm input350" /> #if callable(getattr(cur_nzb_provider, 'ui_string', None)) <div class="clear-left"><p>${cur_nzb_provider.ui_string($field_name)}</p></div> #end if </span> </label> </div> #end if #if $hasattr($cur_nzb_provider, 'digest'): #set $field_name = cur_nzb_provider.get_id() + '_digest' <div class="field-pair"> <label for="$field_name"> <span class="component-title">Cookies:</span> <span class="component-desc"> <input type="text" name="$field_name" id="$field_name" value="<%= starify(cur_nzb_provider.digest) %>" class="form-control input-sm input350"> #if callable(getattr(cur_nzb_provider, 'ui_string', None)) <div class="clear-left"><p>${cur_nzb_provider.ui_string($field_name)}</p></div> #end if </span> </label> </div> #end if <div class="field-pair"> <span class="component-title">$filter_title</span> <span class="component-desc"> <div style="margin-bottom:10px"> <div style="float:left;max-width:230px"> <label for="${cur_nzb_provider.get_id()}_scene_only"> <input type="checkbox" name="${cur_nzb_provider.get_id()}_scene_only" id="${cur_nzb_provider.get_id()}_scene_only" <%= html_checked if cur_nzb_provider.scene_only else '' %>> <span>$filter_scene_only_desc</span> </label> <label for="${cur_nzb_provider.get_id()}_scene_or_contain"> $filter_scene_or_contain_desc<input style="float:right;margin-left:4px;padding:2px 4px;height:24px;width:144px" type="text" name="${cur_nzb_provider.get_id()}_scene_or_contain" placeholder="(opt: start 'regex:')" value="<%= cur_nzb_provider.scene_or_contain %>" class="form-control input-sm input150"> </label> </div> <div style="margin-left:230px"> <label class="show-if-${cur_nzb_provider.get_id()}_enable_recentsearch" for="${cur_nzb_provider.get_id()}_scene_loose"> <input type="checkbox" name="${cur_nzb_provider.get_id()}_scene_loose" id="${cur_nzb_provider.get_id()}_scene_loose" <%= html_checked if cur_nzb_provider.scene_loose else '' %>> <span>$filter_scene_loose_desc</span> </label> <label class="show-if-${cur_nzb_provider.get_id()}_enable_backlog" for="${cur_nzb_provider.get_id()}_scene_loose_active"> <input type="checkbox" name="${cur_nzb_provider.get_id()}_scene_loose_active" id="${cur_nzb_provider.get_id()}_scene_loose_active" <%= html_checked if cur_nzb_provider.scene_loose_active else '' %>> <span>$filter_scene_loose_active_desc</span> </label> </div> <div style="clear:both"> <label style="float:left;min-width:230px" for="${cur_nzb_provider.get_id()}_scene_rej_nuked"> <input type="checkbox" name="${cur_nzb_provider.get_id()}_scene_rej_nuked" id="${cur_nzb_provider.get_id()}_scene_rej_nuked" <%= html_checked if cur_nzb_provider.scene_rej_nuked else '' %>> <span>$filter_scene_rej_nuked_desc</span> </label> <label class="show-if-${cur_nzb_provider.get_id()}_enable_backlog" for="${cur_nzb_provider.get_id()}_scene_nuked_active"> <input type="checkbox" name="${cur_nzb_provider.get_id()}_scene_nuked_active" id="${cur_nzb_provider.get_id()}_scene_nuked_active" <%= html_checked if cur_nzb_provider.scene_nuked_active else '' %>> <span>$filter_scene_nuked_active_desc</span> </label> </div> </div> <p style="clear:both">$filter_tip</p> </span> </div> #if $hasattr($cur_nzb_provider, 'search_mode') and $cur_nzb_provider.supports_backlog: <div class="field-pair"> <span class="component-title">Episode search mode</span> <span class="component-desc"> <label class="space-right"> <input type="radio" name="${cur_nzb_provider.get_id()}_search_mode" id="${cur_nzb_provider.get_id()}_search_mode_eponly" value="eponly" <%= html_checked if 'eponly' == cur_nzb_provider.search_mode else '' %>/>episodes only (normal use) </label> <label> <input type="radio" name="${cur_nzb_provider.get_id()}_search_mode" id="${cur_nzb_provider.get_id()}_search_mode_sponly" value="sponly" <%= html_checked if 'sponly' == cur_nzb_provider.search_mode else '' %>/>season packs only </label> <p>when searching for episodes, collect single episodes or search for packs</p> </span> </div> #end if #if $hasattr($cur_nzb_provider, 'search_fallback') and $cur_nzb_provider.supports_backlog: <div class="field-pair"> <label for="${cur_nzb_provider.get_id()}_search_fallback"> <span class="component-title">Episode search fallback</span> <span class="component-desc"> <input type="checkbox" name="${cur_nzb_provider.get_id()}_search_fallback" id="${cur_nzb_provider.get_id()}_search_fallback" <%= html_checked if cur_nzb_provider.search_fallback else '' %>/> <p>use the alternate episode search mode if no match is found -- warning; may result in a heavy block hit -- best use: manually collect a season, disable after.</p> </span> </label> </div> #end if #if not $cur_nzb_provider.supports_backlog: <div class="field-pair"> <span class="component-desc">The latest releases are the focus of this provider, no backlog searching</span> </div> #end if </div> #end for ## ## #for $cur_torrent_provider in $sickgear.USE_TORRENTS and [$cur_provider for $cur_provider in $sickgear.providers.sorted_sources() if $cur_provider.providerType == $GenericProvider.TORRENT] or []: <div class="providerDiv" id="${cur_torrent_provider.get_id()}Div"> #if callable(getattr(cur_torrent_provider, 'ui_string', None)) #set $field_name = cur_torrent_provider.get_id() + '_tip' #set $tip_text = cur_torrent_provider.ui_string($field_name) #if $tip_text <div class="field-pair"> <span class="component-desc" style="margin:0;width:100%"> <div class="clear-left"><p class="grey-text"><span class="red-text">Important! ${cur_torrent_provider.name}</span> $tip_text</p></div> </span> </div> #end if #end if #set $can_recent = $hasattr($cur_torrent_provider, 'enable_recentsearch') #set $can_backlog = $hasattr($cur_torrent_provider, 'enable_backlog') #set $can_schedule_backlog = $hasattr($cur_torrent_provider, 'enable_scheduled_backlog') #if $cur_torrent_provider.supports_backlog and ($can_recent or $can_backlog or $can_schedule_backlog) <div class="field-pair"> <span class="component-title">Perform search tasks</span> <span class="component-desc"> #if $can_recent <label for="${cur_torrent_provider.get_id()}_enable_recentsearch" style="display:inline"> <input class="view-if" type="checkbox" name="${cur_torrent_provider.get_id()}_enable_recentsearch" id="${cur_torrent_provider.get_id()}_enable_recentsearch" <%= html_checked if cur_torrent_provider.enable_recentsearch else '' %>/> <p>$recentsearch_tip</p> </label> #end if #if $can_backlog <label for="${cur_torrent_provider.get_id()}_enable_backlog" style="display:inline"> <input class="enabler view-if" type="checkbox" name="${cur_torrent_provider.get_id()}_enable_backlog" id="${cur_torrent_provider.get_id()}_enable_backlog" <%= html_checked if cur_torrent_provider.enable_backlog else '' %>/> <p>$backlogsearch_tip</p> </label> #end if #if $can_schedule_backlog <div id="content_${cur_torrent_provider.get_id()}_enable_backlog"> <label for="${cur_torrent_provider.get_id()}_enable_scheduled_backlog" style="display:inline"> <input type="checkbox" name="${cur_torrent_provider.get_id()}_enable_scheduled_backlog" id="${cur_torrent_provider.get_id()}_enable_scheduled_backlog" <%= html_checked if cur_torrent_provider.enable_scheduled_backlog else '' %>/> <p>$scheduled_backlog_tip</p> </label> </div> #end if </span> </div> #end if #if $getattr($cur_torrent_provider, 'url_edit', None): <div class="field-pair"> <label for="url_base"> #set $url_label = callable(getattr(cur_torrent_provider, 'ui_string', None)) and cur_torrent_provider.ui_string(cur_torrent_provider.get_id() + '_site_url') or 'Site URL' <span class="component-title">$url_label</span> <span class="component-desc"> #set $field_name = cur_torrent_provider.get_id() + '_url_edit' <input type="text" name="$field_name" id="$field_name" value="<%= ', '.join(cur_torrent_provider.url_home) %>" class="form-control input-sm input350" /> #if callable(getattr(cur_torrent_provider, 'ui_string', None)) <div class="clear-left"><p>${cur_torrent_provider.ui_string($field_name)}</p></div> #end if </span> </label> </div> #end if #if $hasattr($cur_torrent_provider, 'api_key'): #set $field_name = cur_torrent_provider.get_id() + '_api_key' <div class="field-pair"> <label for="$field_name"> #set $url_label = callable(getattr(cur_torrent_provider, 'ui_string', None)) and cur_torrent_provider.ui_string($field_name) or 'Api key' <span class="component-title">$url_label</span> <span class="component-desc"> <input type="text" name="$field_name" id="$field_name" value="<%= starify(cur_torrent_provider.api_key) %>" class="form-control input-sm input350" /> #if callable(getattr(cur_torrent_provider, 'ui_string', None)) #set $tip_text = cur_torrent_provider.ui_string($field_name + '_tip') <div class="clear-left"><p>$tip_text</p></div> #end if </span> </label> </div> #end if #if $hasattr($cur_torrent_provider, 'digest'): #set $field_name = cur_torrent_provider.get_id() + '_digest' <div class="field-pair"> <label for="$field_name"> <span class="component-title">Cookies:</span> <span class="component-desc"> <input type="text" name="$field_name" id="$field_name" value="<%= starify(cur_torrent_provider.digest) %>" class="form-control input-sm input350" /> #if callable(getattr(cur_torrent_provider, 'ui_string', None)) <div class="clear-left"><p>${cur_torrent_provider.ui_string($field_name)}</p></div> #end if </span> </label> </div> #end if #if $hasattr($cur_torrent_provider, 'hash'): <div class="field-pair"> <label for="${cur_torrent_provider.get_id()}_hash"> <span class="component-title">Hash:</span> <span class="component-desc"> <input type="text" name="${cur_torrent_provider.get_id()}_hash" id="${cur_torrent_provider.get_id()}_hash" value="$cur_torrent_provider.hash" class="form-control input-sm input350" /> </span> </label> </div> #end if #for $user_type in ['username', 'uid']: #if $hasattr($cur_torrent_provider, $user_type): #set $prov_type = '%s_%s' % ($cur_torrent_provider.get_id(), $user_type) #set $user_value = $getattr($cur_torrent_provider, $user_type) or '' <div class="field-pair"> <label for="$prov_type"> <span class="component-title">#if $hasattr($cur_torrent_provider, 'email')#User email#else#$user_type.capitalize():#end if#</span> <span class="component-desc"> <input type="text" name="$prov_type" id="$prov_type" value="$user_value" class="form-control input-sm input350" /> </span> </label> </div> #break #end if #end for #if $hasattr($cur_torrent_provider, 'password'): <div class="field-pair"> <label for="${cur_torrent_provider.get_id()}_password"> <span class="component-title">Password:</span> <span class="component-desc"> <input type="password" autocomplete="nope" name="${cur_torrent_provider.get_id()}_password" id="${cur_torrent_provider.get_id()}_password" value="#echo $cur_torrent_provider.password and '*' * len($cur_torrent_provider.password) or ''#" class="form-control input-sm input350"> </span> </label> </div> #end if #if $hasattr($cur_torrent_provider, 'passkey'): <div class="field-pair"> <label for="${cur_torrent_provider.get_id()}_passkey"> <span class="component-title">Passkey:</span> <span class="component-desc"> <input type="text" name="${cur_torrent_provider.get_id()}_passkey" id="${cur_torrent_provider.get_id()}_passkey" value="<%= starify(cur_torrent_provider.passkey) %>" class="form-control input-sm input350" /> </span> </label> </div> #end if <% client = {} if 'blackhole' == sickgear.TORRENT_METHOD else get_client_instance(sickgear.TORRENT_METHOD)().__class__.__dict__ name = '' if not client else get_client_instance(sickgear.TORRENT_METHOD)().name %> #if ($hasattr($cur_torrent_provider, '_seed_ratio') and '_set_torrent_ratio' in $client) <div class="field-pair"> <label for="${cur_torrent_provider.get_id()}_ratio"> <span class="component-title" id="${cur_torrent_provider.get_id()}_ratio_desc">Seed until ratio (the goal)</span> <span class="component-desc"> <input type="number" name="${cur_torrent_provider.get_id()}_ratio" id="${cur_torrent_provider.get_id()}_ratio" value="$cur_torrent_provider._seed_ratio" class="form-control input-sm input75" /> <p>this ratio is requested of each item sent to $name</p> <div class="clear-left"><p>(#if 'transmission' == $sickgear.TORRENT_METHOD#set -1 to seed forever, or #end if#leave blank for the $name setting)</p></div> </span> </label> </div> #end if #if ($hasattr($cur_torrent_provider, 'seed_time') and '_set_torrent_seed_time' in $client) #set $use_default = 'to use the %s min <a href="%s/config/search/#core-component-group3">torrent search setting minimum default</a>' % ($sickgear.TORRENT_SEED_TIME, $sbRoot) if $sickgear.TORRENT_SEED_TIME else 'for the %s setting' % $name <div class="field-pair"> <label for="${cur_torrent_provider.get_id()}_seed_time"> <span class="component-title" id="${cur_torrent_provider.get_id()}_seed_time_desc">Seed time (provider default)</span> <span class="component-desc"> <input type="number" name="${cur_torrent_provider.get_id()}_seed_time" id="${cur_torrent_provider.get_id()}_seed_time" value="$cur_torrent_provider.seed_time" class="form-control input-sm input75" /> <p>set 1 or more minimum minutes for each item sent to $name</p> <div class="clear-left"><p>(leave blank $use_default)</p></div> </span> </label> </div> #end if #if $hasattr($cur_torrent_provider, 'minseed'): <div class="field-pair"> <label for="${cur_torrent_provider.get_id()}_minseed"> <span class="component-title" id="${cur_torrent_provider.get_id()}_minseed_desc">Minimum seeders</span> <span class="component-desc"> <input type="number" name="${cur_torrent_provider.get_id()}_minseed" id="${cur_torrent_provider.get_id()}_minseed" value="$cur_torrent_provider.minseed" class="form-control input-sm input75" /> <p>a release must have to be snatch worthy</p> </span> </label> </div> #end if #if $hasattr($cur_torrent_provider, 'minleech'): <div class="field-pair"> <label for="${cur_torrent_provider.get_id()}_minleech"> <span class="component-title" id="${cur_torrent_provider.get_id()}_minleech_desc">Minimum leechers</span> <span class="component-desc"> <input type="number" name="${cur_torrent_provider.get_id()}_minleech" id="${cur_torrent_provider.get_id()}_minleech" value="$cur_torrent_provider.minleech" class="form-control input-sm input75" /> <p>a release must have to be snatch worthy</p> </span> </label> </div> #end if #if callable(getattr(cur_torrent_provider, 'ui_string', None)) #set $field_name = cur_torrent_provider.get_id() + '_use_after_get_data' #set $desc_text = cur_torrent_provider.ui_string($field_name) #set $tip_text = cur_torrent_provider.ui_string($field_name + '_tip') #if $tip_text and $hasattr($cur_torrent_provider, 'after_get_data'): <div class="field-pair"> <label for="$field_name"> <span class="component-title">$desc_text</span> <span class="component-desc"> <input type="checkbox" name="$field_name" id="$field_name" <%= html_checked if cur_torrent_provider.use_after_get_data else '' %>> <p>$tip_text</p> </span> </label> </div> #end if #end if <div class="field-pair"> <span class="component-title">$filter_title</span> <span class="component-desc"> <div style="margin-bottom:10px"> <div style="float:left;max-width:230px"> <label for="${cur_torrent_provider.get_id()}_scene_only"> <input type="checkbox" name="${cur_torrent_provider.get_id()}_scene_only" id="${cur_torrent_provider.get_id()}_scene_only" <%= html_checked if cur_torrent_provider.scene_only else '' %>> <span>$filter_scene_only_desc</span> </label> <label for="${cur_torrent_provider.get_id()}_scene_or_contain"> $filter_scene_or_contain_desc<input style="float:right;margin-left:4px;padding:2px 4px;height:24px;width:144px" type="text" name="${cur_torrent_provider.get_id()}_scene_or_contain" placeholder="(opt: start 'regex:')" value="<%= cur_torrent_provider.scene_or_contain %>" class="form-control input-sm input150"> </label> </div> <div style="margin-left:230px"> <label class="show-if-${cur_torrent_provider.get_id()}_enable_recentsearch" for="${cur_torrent_provider.get_id()}_scene_loose"> <input type="checkbox" name="${cur_torrent_provider.get_id()}_scene_loose" id="${cur_torrent_provider.get_id()}_scene_loose" <%= html_checked if cur_torrent_provider.scene_loose else '' %>> <span>$filter_scene_loose_desc</span> </label> #if $cur_torrent_provider.supports_backlog: <label class="show-if-${cur_torrent_provider.get_id()}_enable_backlog" for="${cur_torrent_provider.get_id()}_scene_loose_active"> <input type="checkbox" name="${cur_torrent_provider.get_id()}_scene_loose_active" id="${cur_torrent_provider.get_id()}_scene_loose_active" <%= html_checked if cur_torrent_provider.scene_loose_active else '' %>> <span>$filter_scene_loose_active_desc</span> </label> #end if </div> <div style="clear:both"> <label style="float:left;min-width:230px" for="${cur_torrent_provider.get_id()}_scene_rej_nuked"> <input type="checkbox" name="${cur_torrent_provider.get_id()}_scene_rej_nuked" id="${cur_torrent_provider.get_id()}_scene_rej_nuked" <%= html_checked if cur_torrent_provider.scene_rej_nuked else '' %>> <span>$filter_scene_rej_nuked_desc</span> </label> #if $cur_torrent_provider.supports_backlog: <label class="show-if-${cur_torrent_provider.get_id()}_enable_backlog" for="${cur_torrent_provider.get_id()}_scene_nuked_active"> <input type="checkbox" name="${cur_torrent_provider.get_id()}_scene_nuked_active" id="${cur_torrent_provider.get_id()}_scene_nuked_active" <%= html_checked if cur_torrent_provider.scene_nuked_active else '' %>> <span>$filter_scene_nuked_active_desc</span> </label> <span class="hide-if-${cur_torrent_provider.get_id()}_enable_backlog"> </span> #end if </div> </div> #if $hasattr($cur_torrent_provider, 'freeleech'): <div> <label for="${cur_torrent_provider.get_id()}_freeleech" class="space-right"> <input type="checkbox" name="${cur_torrent_provider.get_id()}_freeleech" id="${cur_torrent_provider.get_id()}_freeleech" <%= html_checked if cur_torrent_provider.freeleech else '' %>/> <span><b>[FreeLeech]</b> only</span> </label> </div> #end if #if $hasattr($cur_torrent_provider, 'confirmed'): <div> <label for="${cur_torrent_provider.get_id()}_confirmed"> <input type="checkbox" name="${cur_torrent_provider.get_id()}_confirmed" id="${cur_torrent_provider.get_id()}_confirmed" <%= html_checked if cur_torrent_provider.confirmed else '' %>/> #set $confirm_label = callable(getattr(cur_torrent_provider, 'ui_string', None)) and cur_torrent_provider.ui_string(cur_torrent_provider.get_id() + '_confirm') or 'site trusted or from verified uploaders' <span>$confirm_label</span> </label> </div> #end if #if $hasattr($cur_torrent_provider, 'may_filter'): <div> #for $cur_fval, $filter in iteritems($cur_torrent_provider.may_filter) #set $cur_fname, $cur_is_default = $filter[0], $filter[1] #set $filter_id = '%s_filter_%s' % ($cur_torrent_provider.get_id(), $cur_fval) <label class="space-right"> <input type="checkbox" name="$filter_id" id="$filter_id" #echo ('', $html_checked)[$cur_fval in $cur_torrent_provider.filter]#/> <span>$cur_fname</span> </label> #end for #if $cur_torrent_provider.may_filter <span>(see $cur_torrent_provider.name)</span> #end if </div> #end if #if $hasattr($cur_torrent_provider, 'reject_m2ts'): <div> <label for="${cur_torrent_provider.get_id()}_reject_m2ts"> <input type="checkbox" name="${cur_torrent_provider.get_id()}_reject_m2ts" id="${cur_torrent_provider.get_id()}_reject_m2ts" <%= html_checked if cur_torrent_provider.reject_m2ts else '' %>/> <span>not Blu-ray M2TS (MPEG-2 Transport Stream) container releases</span> </label> </div> #end if <p style="clear:both">$filter_tip</p> </span> </div> #if $hasattr($cur_torrent_provider, 'search_mode') and $cur_torrent_provider.supports_backlog: <div class="field-pair"> <span class="component-title">Episode search mode</span> <span class="component-desc"> <label class="space-right"> <input type="radio" name="${cur_torrent_provider.get_id()}_search_mode" id="${cur_torrent_provider.get_id()}_search_mode_eponly" value="eponly" <%= html_checked if 'eponly' == cur_torrent_provider.search_mode else '' %>/>episodes only (normal use) </label> <label> <input type="radio" name="${cur_torrent_provider.get_id()}_search_mode" id="${cur_torrent_provider.get_id()}_search_mode_sponly" value="sponly" <%= html_checked if 'sponly' == cur_torrent_provider.search_mode else '' %>/>season packs only </label> <p>when searching for episodes, collect single episodes or search for packs</p> </span> </div> #end if #if $hasattr($cur_torrent_provider, 'search_fallback') and $cur_torrent_provider.supports_backlog: <div class="field-pair"> <label for="${cur_torrent_provider.get_id()}_search_fallback"> <span class="component-title">Episode search fallback</span> <span class="component-desc"> <input type="checkbox" name="${cur_torrent_provider.get_id()}_search_fallback" id="${cur_torrent_provider.get_id()}_search_fallback" <%= html_checked if cur_torrent_provider.search_fallback else '' %>/> <p>use alternate episode search mode if no match is found -- warning; may result in duplicates or a heavy ratio hit -- best use: manually collect a season, disable after</p> </span> </label> </div> #end if #if not $cur_torrent_provider.supports_backlog: <div class="field-pair"> <span class="component-desc">The latest releases are the focus of this provider, no backlog searching</span> </div> #end if </div> #end for <!-- end div for editing providers --> #if $provider_config_list <input type="submit" class="btn config_submitter" value="Save Changes" /><br/> #end if </fieldset> </div><!-- /component-group2 //--> #if $sickgear.USE_NZBS <div id="core-component-group3" class="component-group"> <div class="component-group-desc"> <h3>Custom Newznab</h3> <p>Add, setup or remove newznab providers.</p> </div> <fieldset class="component-group-list"> <div class="field-pair"> <label for="newznab_string"> <span class="component-title">Select provider:</span> <span class="component-desc"> <input type="hidden" name="newznab_string" id="newznab_string" /> <select id="editANewznabProvider" class="form-control input-sm"> <option value="addNewznab">-- add new provider --</option> </select> </span> </label> </div> <div class="newznabProviderDiv" id="addNewznab"> <div class="field-pair"> <label for="newznab_name"> <span class="component-title">Provider name</span> <span class="component-desc"> <input type="text" id="newznab_name" class="form-control input-sm input200" /> </span> </label> </div> <div class="field-pair"> <label for="newznab_url"> <span class="component-title">Site URL</span> <span class="component-desc"> <input type="text" id="newznab_url" class="form-control input-sm input350" /> </span> </label> </div> <div class="field-pair"> <label for="newznab_key"> <span class="component-title">API key</span> <span class="component-desc"> <input type="text" id="newznab_key" class="form-control input-sm input350" /> </span> <span class="component-desc"> <div class="clear-left"> <p><code>apikey</code> for API only or <code>i=num&r=key</code> for API + RSS cache fallback<br> enter 0 (zero) if not required</p> </div> </span> </label> </div> <div class="field-pair"> <label> <span class="component-title">Extra categories to search <span style="font-weight:normal">with.. (u)hd, sd, sport, anime</span> </span> <span class="component-desc"> <div id="nn-cats" class="hide"> <div class="pull-left"> <select class="pull-left" id="newznab_cap" multiple="multiple" style="min-width:10em;min-height:72px"></select> <input class="btn" type="button" class="newznab_cat_update" id="newznab_cat_update" value="+/-" style="position:relative;bottom:-15px"> </div> <select id="newznab_cat" multiple="multiple" style="min-width:7em;min-height:72px"></select> <div class="clear-left"> <p>multi-select newznab categories on the left<br /> "+/-" will add/remove all, finally "Save Changes"</p> </div> </div> <div id="nn-nocats" class="hide"> <span>No extra categories found</span> </div> <div id="nn-enable-for-cats" class="hide"> <span class="grey-text">Enable provider for categories</span> </div> <div id="nn-loadcats" class="hide"> <span class="grey-text">Loading categories...</span> </div> </span> </label> </div> <div id="newznab_add_div"> <input class="btn" type="button" class="newznab_save" id="newznab_add" value="Add" /> </div> <div id="newznab_update_div" style="display: none;"> <input class="btn btn-danger newznab_delete" type="button" class="newznab_delete" id="newznab_delete" value="Delete" /> </div> </div> </fieldset> </div><!-- /component-group3 //--> #end if #if $sickgear.USE_TORRENTS <div id="core-component-group4" class="component-group"> <div class="component-group-desc"> <h3>Custom Torrent</h3> <p>Add, setup or remove torrent RSS providers.</p> </div> <fieldset class="component-group-list"> <div class="field-pair"> <label for="torrentrss_string"> <span class="component-title">Select provider</span> <span class="component-desc"> <input type="hidden" name="torrentrss_string" id="torrentrss_string" /> <select id="editATorrentRssProvider" class="form-control input-sm"> <option value="addTorrentRss">-- add new provider --</option> </select> </span> </label> </div> <div class="torrentRssProviderDiv" id="addTorrentRss"> <div class="field-pair"> <label for="torrentrss_name"> <span class="component-title">Provider name</span> <span class="component-desc"> <input type="text" id="torrentrss_name" class="form-control input-sm input200" /> </span> </label> </div> <div class="field-pair"> <label for="torrentrss_url"> <span class="component-title">RSS URL</span> <span class="component-desc"> <input type="text" id="torrentrss_url" class="form-control input-sm input350" /> </span> </label> </div> <div class="field-pair"> <label for="torrentrss_cookies"> <span class="component-title">Cookies:</span> <span class="component-desc"> <input type="text" id="torrentrss_cookies" class="form-control input-sm input350" /> <p>eg. uid=xx;pass=yy</p> <div class="clear-left"><p>enter [ <span class="grey-text">sg=0</span> ] if not required (a URL containing a key may not need cookies)</p></div> </span> </label> </div> <div id="torrentrss_add_div"> <input type="button" class="btn torrentrss_save" id="torrentrss_add" value="Add" /> </div> <div id="torrentrss_update_div" style="display: none;"> <input type="button" class="btn btn-danger torrentrss_delete" id="torrentrss_delete" value="Delete" /> </div> </div> </fieldset> </div><!-- /component-group4 //--> #end if <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/> </div><!-- /config-components //--> </form> </div> </div> <script type="text/javascript" charset="utf-8"> <!-- jQuery('#config-components').tabs(); //--> </script> #include $os.path.join($sickgear.PROG_DIR, 'gui/slick/interfaces/default/inc_bottom.tmpl')