2023-01-12 01:04:47 +00:00
#from sys import version_info
#import datetime
#import locale
#import operator
#import sickgear
#from sickgear import config , metadata
#from sickgear . metadata . generic import GenericMetadata
#from sickgear . common import *
#from sickgear . db import db_supports_backup
#from sickgear . helpers import anon_url , maybe_plural
#from sickgear . logger import reverseNames as file_logging_presets
#from sickgear . piper import check_pip_env
#from sickgear . sgdatetime import *
<% def sg_var(varname, default=False): return getattr(sickgear, varname, default) %> #slurp #
<% def sg_str(varname, default=''): return getattr(sickgear, varname, default) %> #slurp #
#from _23 import list_keys
##
#set global $ title = ' Config - General '
#set global $ header = ' General Settings '
#set global $ sbPath = ' ../.. '
#set global $ topmenu = ' config '
##
#import os . path
#include $ os . path . join ( $ sg_str ( ' 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
##
#set $ checked = ' checked= " checked " '
#set $ selected = ' selected= " selected " '
##
<script type="text/javascript" src=" $ sbRoot /js/config.js?v= $ sbPID "></script>
<script type="text/javascript" src=" $ sbRoot /js/rootDirs.js?v= $ sbPID "></script>
<div id="config">
<div id="config-content">
<form id="configForm" action="save_general" method="post">
$ xsrf_form_html
<div id="config-components">
<ul>
<li><a href=" #core - component - group1 " >Misc</a></li>
<li><a href=" #core - component - group2 " >Interface</a></li>
<li><a href=" #core - component - group3 " >Advanced</a></li>
</ul>
<div id="core-component-group1">
<div class="component-group">
<div class="component-group-desc">
<h3>Misc</h3>
<p>Startup options. TV info source options. Log and show file locations.</p>
<p><b>Some options may require a manual restart to take effect.</b></p>
</div>
<fieldset class="component-group-list">
<div class="field-pair">
<label for="launch_browser">
<span class="component-title">Launch browser</span>
<span class="component-desc">
<input type="checkbox" name="launch_browser" id="launch_browser" #echo ( ' ' , $ checked ) [ $ sg_var ( ' LAUNCH_BROWSER ' ) ] # >
<p>open the SickGear home page on startup</p>
</span>
</label>
</div>
<div class="field-pair">
<label for="update_shows_on_start">
<span class="component-title">Update shows on startup</span>
<span class="component-desc">
<input type="checkbox" name="update_shows_on_start" id="update_shows_on_start" #echo ( ' ' , $ checked ) [ $ sg_var ( ' UPDATE_SHOWS_ON_START ' ) ] # >
<p>with show data; episode plot, images, air and end dates, etc. Disable for a quicker startup. Show data is scheduled to update during hour <span class="show_update_hour_value"> $ sg_var ('SHOW_UPDATE_HOUR', 3)</span></p>
</span>
</label>
</div>
<div class="field-pair">
<label for="show_update_hour">
<span class="component-title">Update shows during hour</span>
<span class="component-desc">
<input type="number" name="show_update_hour" id="show_update_hour" value=" $ sg_var ('SHOW_UPDATE_HOUR', 3)" class="form-control input-sm input75">
<p>(0 ... 23) with show data; episode plot, images, air and end dates, etc.</p>
</span>
</label>
</div>
<div class="field-pair">
<span class="component-title">Send to trash for actions</span>
<span class="component-desc">
<label for="trash_remove_show" class="nextline-block">
<input type="checkbox" name="trash_remove_show" id="trash_remove_show" #echo ( ' ' , $ checked ) [ $ sg_var ( ' TRASH_REMOVE_SHOW ' ) ] # >
<p>when using show "Remove" and delete files</p>
</label>
<label for="trash_rotate_logs" class="nextline-block">
<input type="checkbox" name="trash_rotate_logs" id="trash_rotate_logs" #echo ( ' ' , $ checked ) [ $ sg_var ( ' TRASH_ROTATE_LOGS ' ) ] # >
<p>on scheduled deletes of the oldest log files</p>
</label>
<div class="clear-left"><p>selected actions use trash (recycle bin) instead of the default permanent delete</p></div>
</span>
</div>
<div class="field-pair">
<label for="log_dir">
<span class="component-title">Log file folder location</span>
<span class="component-desc">
<input type="text" name="log_dir" id="log_dir" value=" $ sg_str ('ACTUAL_LOG_DIR')" class="form-control input-sm input350">
</span>
</label>
</div>
#set $ def_isrc = 0
#if $ sg_var ( ' TVINFO_DEFAULT ' )
#set $ def_isrc = $ sg_var ( ' TVINFO_DEFAULT ' )
#end if
#if $ getVar ( ' infosrc ' , None ) and 1 < $ len ( $ infosrc )
<div class="field-pair">
<label for="indexer_default">
<span class="component-title">Set initial TV info source as</span>
<span class="component-desc">
<select id="indexer_default" name="indexer_default" class="form-control input-sm">
<option value="0" #echo ( ' ' , $ selected ) [ 0 == $ def_isrc ] # >All Sources</option>
#for $ isrc in $ infosrc
<option value=" $ isrc " #echo ( ' ' , $ selected ) [ $ isrc == $ sg_var ( ' TVINFO_DEFAULT ' , 0 ) ] # > $ sickgear . TVInfoAPI ().sources[ $ isrc ]</option>
#end for
</select>
<span>as the default selection when adding new shows</span>
</span>
</label>
</div>
#end if
<div class="field-pair">
<label for="indexer_timeout">
<span class="component-title">Timeout TV info source at</span>
<span class="component-desc">
<input type="text" name="indexer_timeout" id="indexer_timeout" value=" $ sg_var ('TVINFO_TIMEOUT', 20)" class="form-control input-sm input75">
<p>seconds of inactivity when finding new shows (default:10)</p>
</span>
</label>
</div>
<div class="field-pair">
<label>
<span class="component-title">Show root directories</span>
<span class="component-desc">
<p>where the files of shows are located</p>
#include $ os . path . join ( $ sg_str ( ' PROG_DIR ' ) , ' gui/slick/interfaces/default/inc_rootDirs.tmpl ' )
</span>
</label>
</div>
<div class="field-pair">
<label for="show_dirs_with_dots">
<span class="component-title">Use dots in show.name path</span>
<span class="component-desc">
<input type="checkbox" name="show_dirs_with_dots" id="show_dirs_with_dots" #echo ( ' ' , $ checked ) [ $ sg_var ( ' SHOW_DIRS_WITH_DOTS ' ) ] # >
<p>or use space i.e. "show name" (default:unset)</p>
</span>
</label>
</div>
<input type="submit" class="btn config_submitter" value="Save Changes">
</fieldset>
</div>
<div class="component-group">
<div class="component-group-desc">
<h3>Updates</h3>
<p>Options for software, package and alternative shownames/numbers.</p>
</div>
<fieldset class="component-group-list">
#set $ git_unsafe = ' git ' == $ sickgear . update_software_scheduler . action . install_type and $ sickgear . update_software_scheduler . action . updater . unsafe
#if $ git_unsafe
<div class="field-pair">
<span class="component-title">Built-in updates disabled</span>
<span class="component-desc"><p>SickGear directory is not marked as safe in git settings.
Tip: Use 'install-path' <code> $ sg_str ('PROG_DIR').replace('\\', '/')</code> to enable git updates in...</p>
<code>git config --global --add safe.directory install-path</code>
</span>
</div>
#end if
#if not $ sg_var ( ' EXT_UPDATES ' )
#if not $ git_unsafe
<div class="field-pair">
<span class="component-title">Software updates</span>
<span class="component-desc">
<label class="nextline-block">
<input type="checkbox" class="views-if-interval1" name="update_notify" #echo ( ' ' , $ checked ) [ $ sg_var ( ' UPDATE_NOTIFY ' , True ) ] # >
<p>display message for outdated software, run checks at startup and at interval<sup>1</sup></p>
</label>
<label class="nextline-block">
<input type="checkbox" class="views-if-interval1" name="update_auto" #echo ( ' ' , $ checked ) [ $ sg_var ( ' UPDATE_AUTO ' ) ] # >
<p>update software automatically at startup and at interval<sup>1</sup></p>
</label>
#set $ hide_interval1 = not ( $ sg_var ( ' UPDATE_NOTIFY ' ) or $ sg_var ( ' UPDATE_AUTO ' ) )
<label class="nextline-block show-if-interval1" style=" #if $ hide_interval1 # display:none; #end if# padding:6px 0">
<input type="text" name="update_interval" value=" $ sg_var ('UPDATE_INTERVAL', 12)" class="form-control input-sm input75">
<p>hours interval<sup>1</sup> (default: $ sg_var ('DEFAULT_UPDATE_INTERVAL', 'n/a'))</p>
</label>
<label class="nextline-block show-if-interval1" #if $ hide_interval1 # style="display:none" #end if# >
<input type="checkbox" name="notify_on_update" #echo ( ' ' , $ checked ) [ $ sg_var ( ' NOTIFY_ON_UPDATE ' ) ] # >
<p>send a message to all enabled notifiers when SickGear is updated</p>
</label>
</span>
</div>
#end if
<div class="field-pair">
<span class="component-title">Package updates</span>
<span class="component-desc">
<label class="nextline-block">
<input type="checkbox" class="views-if-package-table views-if-interval2" name="update_packages_notify" #echo ( ' ' , $ checked ) [ $ sg_var ( ' UPDATE_PACKAGES_NOTIFY ' ) ] # >
<p>display message for outdated packages, run checks at startup and at interval<sup>2</sup></p>
</label>
<label class="nextline-block">
<input type="checkbox" class="views-if-package-table views-if-interval2" name="update_packages_auto" #echo ( ' ' , $ checked ) [ $ sg_var ( ' UPDATE_PACKAGES_AUTO ' ) ] # >
<p>update packages automatically at startup and at interval<sup>2</sup></p>
</label>
#set $ hide_interval2 = not ( $ sg_var ( ' UPDATE_PACKAGES_NOTIFY ' ) or $ sg_var ( ' UPDATE_PACKAGES_AUTO ' ) )
<label class="nextline-block show-if-interval2" style=" #if $ hide_interval2 # display:none; #end if# padding:6px 0">
<input type="text" name="update_packages_interval" value=" $ sg_var ('UPDATE_PACKAGES_INTERVAL', 24)" class="form-control input-sm input75">
<p>hours interval<sup>2</sup> (default: $ sg_var ('DEFAULT_UPDATE_PACKAGES_INTERVAL', 'n/a'))</p>
</label>
<label class="nextline-block">
<input type="checkbox" class="views-if-package-table" name="update_packages_menu" #echo ( ' ' , $ checked ) [ $ sg_var ( ' UPDATE_PACKAGES_MENU ' ) ] # >
<p>include in 'Check for Updates' menu action</p>
</label>
#set $ hide_package_tbl = not ( $ sg_var ( ' UPDATE_PACKAGES_NOTIFY ' ) or $ sg_var ( ' UPDATE_PACKAGES_AUTO ' ) or $ sg_var ( ' UPDATE_PACKAGES_MENU ' ) )
<div class="show-if-package-table">
#try
#set $ installed , $ extra_info , $ known_failed = $ check_pip_env ( )
#except
#set $ installed , $ extra_info , $ known_failed = ( [ ] , None , [ ] )
#end try
<style>
.extras{padding-top:10px}
.extras p{margin-bottom:3px}
.extras th{padding:0 2px}
.extras td{white-space:nowrap}
.extras .center{text-align:center}
.extras .package-col{width:135px;padding-left:0}
.extras .info-col{min-width:135px;padding-left:30px}
</style>
<div class="extras">
<table cellspacing="0" border="0" cellpadding="0">
<thead>
<tr class="grey-text">
<th class="package-col">package (py #echo ' . ' . join ( ' %s ' % n for n in sys . version_info [ 0 : 3 ] ) # )</th>
<th class="center">version in use</th>
<th class="info-col">extra info</th>
</tr>
</thead>
<tbody>
#for $ item in $ installed
<tr><td class="package-col"> $ item [0].lower()</td><td class="center"> #echo $ item [ 1 ] or ' - ' # </td><td class="info-col"> #echo $ sg_var ( ' UPDATES_TODO ' , { } ) . get ( $ item [ 0 ] ) and ' update ready ' or $ extra_info . get ( $ item [ 0 ] , ' filled optional ' ) # </td></tr>
#end for
#set $ update_link = ' <a href= " %s /home/check-update " >check update (clear failed)</a> ' % $ sbRoot
#for $ item in $ known_failed
<tr class="grey-text"><td> $ item . lower ()</td><td class="center">failed</td><td class="info-col"> $ update_link </td></tr>
#set $ update_link = ' '
#end for
</tbody>
</table>
2023-02-15 13:37:20 +00:00
<p class="extras">the above info may help with packages that don't update internally<br>manual installation tip: <code>python -m pip install -U #echo $ pip_user_arg # package</code></p>
2023-01-12 01:04:47 +00:00
</div>
</div>
</span>
</div>
#else
<div class="field-pair">
<span class="component-title">Built-in updates disabled</span>
<span class="component-desc"><p>using #echo $ sg_var ( ' EXT_UPDATES ' ) or ' other ' # update method instead</p>
</span>
</div>
#end if
<div class="field-pair">
<span class="component-title">Alias show names/numbers</span>
<span class="component-desc" style="line-height:20px">
<input id="alias" class="btn btn-inline" type="button" value="Process">
<p>updates for alternative show names and numbers</p>
<span id="alias-result"></span>
</span>
</div>
#if not $ sg_var ( ' EXT_UPDATES ' )
<input type="submit" class="btn config_submitter" value="Save Changes">
#end if
</fieldset>
</div>
</div><!-- /component-group1 //-->
<div id="core-component-group2">
<div class="component-group">
<div class="component-group-desc">
<h3>User Interface</h3>
<p>Options for visual appearance.</p>
</div>
<fieldset class="component-group-list">
<div class="field-pair">
<label for="theme_name">
<span class="component-title">Display theme:</span>
<span class="component-desc">
<select id="theme_name" name="theme_name" class="form-control input-sm">
<option value="dark" #echo ( ' ' , $ selected ) [ ' dark ' == $ sg_str ( ' THEME_NAME ' , ' dark ' ) ] # >Dark</option>
<option value="light" #echo ( ' ' , $ selected ) [ ' light ' == $ sg_str ( ' THEME_NAME ' ) ] # >Light</option>
</select>
<span class="red-text">for appearance to take effect, save then refresh your browser</span>
</span>
</label>
</div>
<div class="field-pair">
<label for="default_home">
<span class="component-title">Use as default home page:</span>
<span class="component-desc">
<select id="default_home" name="default_home" class="form-control input-sm">
<option value="shows" #echo ( ' ' , $ selected ) [ ' shows ' == $ sg_str ( ' DEFAULT_HOME ' ) ] # >Show List</option>
<option value="episodes" #echo ( ' ' , $ selected ) [ ' episodes ' == $ sg_str ( ' DEFAULT_HOME ' ) ] # >Daily Sch.</option>
<option value="history" #echo ( ' ' , $ selected ) [ ' history ' == $ sg_str ( ' DEFAULT_HOME ' ) ] # >History</option>
</select>
</span>
</label>
</div>
#if not hasattr ( $ sickgear , ' FANART_LIMIT ' ) # <span class="red-text">Restart SickGear to reveal new options here</span> #else #
<div class="field-pair">
<label for="fanart_limit">
<span class="component-title">Maximum fanart image files</span>
<span class="component-desc">
<input type="text" name="fanart_limit" id="fanart_limit" value=" $ sg_var ('FANART_LIMIT', 3)" class="form-control input-sm input75">
<span>per show to cache (0 ... 500)</span>
</span>
</label>
</div>
#end if
<div class="field-pair">
<label for="showlist_tagview">
<span class="component-title">Group show list shows into:</span>
<span class="component-desc">
<select id="showlist_tagview" name="showlist_tagview" class="form-control input-sm">
<option value="standard" #echo ( ' ' , $ selected ) [ ' standard ' == $ sg_str ( ' SHOWLIST_TAGVIEW ' , ' standard ' ) ] # >One Show List</option>
<option value="anime" #echo ( ' ' , $ selected ) [ ' anime ' == $ sg_str ( ' SHOWLIST_TAGVIEW ' ) ] # >Show / Anime Lists</option>
<option value="custom" #echo ( ' ' , $ selected ) [ ' custom ' == $ sg_str ( ' SHOWLIST_TAGVIEW ' ) ] # >Custom Lists</option>
</select>
#set $ hidden = ' class= " hidden " '
<span id="showlist_tagview_standard" #echo ( ' ' , $ hidden ) [ ' standard ' not in $ sg_str ( ' SHOWLIST_TAGVIEW ' , ' standard ' ) ] # >that contains all shows (default)</span>
<span id="showlist_tagview_anime" #echo ( ' ' , $ hidden ) [ ' anime ' not in $ sg_str ( ' SHOWLIST_TAGVIEW ' ) ] # >two groups, the show list and anime</span>
<span id="showlist_tagview_custom" #echo ( ' ' , $ hidden ) [ ' custom ' not in $ sg_str ( ' SHOWLIST_TAGVIEW ' ) ] # >multiple custom<sup>1</sup> named groups and a "Show List"</span>
</span>
</label>
</div>
<div id="showlist_tagview_custom_config" class="field-pair #if $ sg_str ( ' SHOWLIST_TAGVIEW ' ) != ' custom ' then ' hidden ' else ' ' # ">
<label for="show_tags">
<span class="component-title">Group names for show list<sup>1</sup></span>
<span class="component-desc">
<input type="text" name="show_tags" id="show_tags" value=" $ show_tags " class="form-control input-sm input300">
<span>comma separated names</span>
<p class="clear-left note">group shows to the order of this custom list (add shows to groups with <a href=" $ sbRoot /manage/">mass edit</a>)</p>
</span>
</label>
</div>
<div class="field-pair">
<label for="home_search_focus">
<span class="component-title">Give show list search focus</span>
<span class="component-desc">
<input type="checkbox" name="home_search_focus" id="home_search_focus" #echo ( ' ' , $ checked ) [ $ sg_var ( ' HOME_SEARCH_FOCUS ' , True ) ] # >
<p>page refresh on "Show List" will start search box focused</p>
</span>
</label>
</div>
<div class="field-pair">
<label for="use_imdb_info">
<span class="component-title">Enable IMDb info</span>
<span class="component-desc">
<input type="checkbox" name="use_imdb_info" id="use_imdb_info" #echo ( ' ' , $ checked ) [ $ sg_var ( ' USE_IMDB_INFO ' , True ) ] # >
<p>for ui links, display show; ratings, country flag, year, runtime, and genre tags</p>
</span>
</label>
</div>
<div class="field-pair">
<label for="imdb-accounts">
<span class="component-title">Public IMDb watchlists:</span>
#if not hasattr ( $ sickgear , ' IMDB_ACCOUNTS ' ) # <span class="red-text">Restart SickGear to reveal new options here</span> #else #
<span class="component-desc">
<select id="imdb-accounts" class="pull-left form-control input-sm">
<option value="new" selected="selected">Add watchlist ...</option>
#for $ i , $ v in $ enumerate ( $ sg_str ( ' IMDB_ACCOUNTS ' ) )
#if not $ i % 2
#set $ id = $ v
#else
<option value=" $ id "> #echo ' %s %s ' % ( $ v , ( ' \' s ' , ' ' ) [ ' your ' == $ v . replace ( ' (Off) ' , ' ' ) . lower ( ) ] ) # list</option>
#end if
#end for
</select>
<input type="button" class="btn btn-inline" value="Delete" id="imdb-list-del" disabled="disabled" />
</span>
</label>
<label for="imdb-url">
<span class="component-title"> </span>
<span class="component-desc">
<input type="text" id="imdb-url" value="" class="form-control input-sm input250" />
<input type="button" class="btn btn-inline" value="Enable" id="imdb-list-onoff" />
<div class="clear-left">
<p><code>imdb.com/user/ur64552276</code> or <code>ur64552276</code> to <span id="view-list">view list</span><a class="hide" id="link-list" href=" $ sbRoot /add-shows/watchlist-imdb?account=64552276">view list</a> at "Add from IMDb"
</p></div>
#end if
</span>
</label>
</div>
#if not hasattr ( $ sickgear , ' DISPLAY_FREESPACE ' ) # <span class="red-text">Restart SickGear to reveal new option here</span> #else #
<div class="field-pair">
<label for="display-freespace">
<span class="component-title">Display freespace</span>
<span class="component-desc">
<input type="checkbox" name="display_freespace" id="display-freespace" #echo ( ' ' , $ checked ) [ $ sg_var ( ' DISPLAY_FREESPACE ' , True ) ] # >
<p>free space of parent locations is refreshed into any page footer request</p>
</span>
</label>
</div>
#end if
<div class="field-pair">
<label for="sort_article">
<span class="component-title">Sort with "The", "A", "An"</span>
<span class="component-desc">
<input type="checkbox" name="sort_article" id="sort_article" #echo ( ' ' , $ checked ) [ $ sg_var ( ' SORT_ARTICLE ' ) ] # >
<p>include articles ("The", "A", "An") when sorting show lists</p>
</span>
</label>
</div>
#if not $ SGDatetime . is_locale_eng ( )
<input type="hidden" name="fuzzy_dating" id="fuzzy_dating" value="false">
<input type="hidden" name="trim_zero" id="trim_zero" value="false">
#else
<div class="field-pair">
<label for="fuzzy_dating">
<span class="component-title">Display fuzzy dates</span>
<span class="component-desc">
<input type="checkbox" name="fuzzy_dating" id="fuzzy_dating" class="view-if datePresets" #echo ( ' ' , $ checked ) [ $ sg_var ( ' FUZZY_DATING ' ) == True ] # >
<p>move absolute dates into tooltips and display e.g. "Last Thu", "On Tue"</p>
</span>
</label>
</div>
<div class="field-pair show-if-fuzzy_dating #echo ( ' metadataDiv ' , ' ' ) [ $ sg_var ( ' FUZZY_DATING ' ) ] # ">
<label for="trim_zero">
<span class="component-title">Trim date and time</span>
<span class="component-desc">
<input type="checkbox" name="trim_zero" id="trim_zero" #echo ( ' ' , $ checked ) [ True == $ sg_var ( ' TRIM_ZERO ' ) ] # >
<p>display minimalist date and time i.e. <del>02:00</del> = 2:00, <del>02:00pm</del> = 2pm, <del>03 Jan</del> = 3 Jan</p>
</span>
</label>
</div>
#end if
<div class="field-pair">
<label for="date_presets">
<span class="component-title">Date style:</span>
<span class="component-desc">
<select class="form-control input-sm #echo ( ' metadataDiv ' , ' ' ) [ $ sg_var ( ' FUZZY_DATING ' ) ] # " id="date_presets #echo ( ' _na ' , ' ' ) [ $ sg_var ( ' FUZZY_DATING ' ) ] # " name="date_preset #echo ( ' _na ' , ' ' ) [ $ sg_var ( ' FUZZY_DATING ' ) ] # ">
#for $ cur_preset in $ date_presets
<option value=" $ cur_preset " #echo ( ' ' , $ selected ) [ $ cur_preset == $ sg_str ( ' DATE_PRESET ' , ' %x ' ) or ( ' %x ' == $ sg_str ( ' DATE_PRESET ' , ' %x ' ) and ' $cur_preset ' == ' %a , % b %d , % Y ' ) ] # > $ datetime . datetime ( $ datetime . datetime . now ().year, 12, 31, 14, 30, 47).strftime( $ cur_preset )</option>
#end for
</select>
<select class="form-control input-sm #echo ( ' ' , ' metadataDiv ' ) [ $ sg_var ( ' FUZZY_DATING ' ) ] # " id="date_presets #echo ( ' ' , ' _na ' ) [ $ sg_var ( ' FUZZY_DATING ' ) ] # " name="date_preset #echo ( ' ' , ' _na ' ) [ $ sg_var ( ' FUZZY_DATING ' ) ] # ">
<option value="%x" #echo ( ' ' , $ selected ) [ ' %x ' == $ sg_str ( ' DATE_PRESET ' , ' %x ' ) ] # >Use System Default</option>
#for $ cur_preset in $ date_presets
<option value=" $ cur_preset " #echo ( ' ' , $ selected ) [ $ cur_preset == $ sg_str ( ' DATE_PRESET ' , ' %x ' ) ] # > $ datetime . datetime ( $ datetime . datetime . now ().year, 12, 31, 14, 30, 47).strftime( $ cur_preset )</option>
#end for
</select>
</span>
</label>
</div>
<div class="field-pair">
<label for="time_presets">
<span class="component-title">Time style:</span>
<span class="component-desc">
<select id="time_presets" name="time_preset" class="form-control input-sm">
#for $ cur_preset in $ time_presets
#set $ show_seconds = not $ sg_var ( ' FUZZY_DATING ' )
<option value=" $ cur_preset " #echo ( ' ' , $ selected ) [ $ cur_preset == $ sg_str ( ' TIME_PRESET_W_SECONDS ' , ' % I: % M: % S % p ' ) ] # > $ SGDatetime . now ().sbftime(show_seconds= $ show_seconds , t_preset= $ cur_preset )</option>
#end for
</select>
<span id="trim_info_seconds"><b>note:</b> seconds are only shown on the History page</span>
</span>
</label>
</div>
<div class="field-pair">
<span class="component-title">Timezone:</span>
<span class="component-desc">
<label for="local" class="space-right">
<input type="radio" name="timezone_display" id="local" value="local" #echo ( ' ' , $ checked ) [ ' local ' == $ sg_str ( ' TIMEZONE_DISPLAY ' ) ] # >local
</label>
<label for="network">
<input type="radio" name="timezone_display" id="network" value="network" #echo ( ' ' , $ checked ) [ ' network ' == $ sg_str ( ' TIMEZONE_DISPLAY ' , ' network ' ) ] # >network
</label>
<div class="clear-left"><p>display dates and times in either your timezone or the shows network timezone</p></div>
</span>
</div>
<input type="submit" class="btn config_submitter" value="Save Changes">
</fieldset>
</div><!-- /User interface component-group -->
<div class="component-group">
<div class="component-group-desc">
<h3>Web Interface</h3>
<p>It is recommended that you enable a username and password to secure SickGear from being tampered with remotely.</p>
<p><b>These options require a manual restart to take effect.</b></p>
</div>
<fieldset class="component-group-list">
<div class="field-pair">
<label for="web_username">
<span class="component-title">Username</span>
<span class="component-desc">
<input type="text" name="web_username" id="web_username" value=" $ sg_str ('WEB_USERNAME')" class="form-control input-sm input300">
<p>blank for none</p>
</span>
</label>
</div>
<div class="field-pair">
<label for="web_password">
<span class="component-title">Password</span>
<span class="component-desc">
<input type="password" autocomplete="nope" name="web_password" id="web_password" value=" #echo ' * ' * len ( $ sg_str ( ' WEB_PASSWORD ' ) ) # " class="form-control input-sm input300">
<p>blank for none</p>
<span class="clear-left">check autoProcessTV.cfg is set up for external apps to use post processing scripts</span>
</span>
</label>
</div>
<div class="field-pair">
<label for="calendar_unprotected">
<span class="component-title">Unprotected calendar</span>
<span class="component-desc">
<input type="checkbox" name="calendar_unprotected" id="calendar_unprotected" #echo ( ' ' , $ checked ) [ $ sg_var ( ' CALENDAR_UNPROTECTED ' ) ] # >
<p>permit subscribing to the calendar without username and password.
Some services like Google Calendar will only work with <b class="boldest">no</b> authentication</p>
</span>
</label>
</div>
<div class="field-pair">
<label for="use_api">
<span class="component-title">API enable</span>
<span class="component-desc">
<input type="checkbox" name="use_api" class="enabler" id="use_api" #echo ( ' ' , $ checked ) [ $ sg_var ( ' USE_API ' ) ] # >
<p>permit the use of the SickGear (and legacy sickgear) API</p>
</span>
</label>
</div>
<div id="content_use_api">
<div class="field-pair">
<label for="api_key">
<span class="component-title">API key</span>
<span class="component-desc">
<input id="app-name" type="text" placeholder="enter app name" class="form-control input-sm input150">
<input id="generate-api-key" value="Generate" type="button" class="btn btn-inline">
<span id="generate-result"> </span>
<p class="clear-left">apps using SickGear API calls gain full access, legacy sickgear endpoints are limited to thetvdb.com shows</p>
<div id="api-keys" class="clear-left">
<div class="new-key highlight-text" style="display:none"><span class="qr-btn"><a data-src=" #qr - body " rel= " " name= " qr " title= " API key QR code " ><span class= " glyphicon glyphicon - qrcode " ></span></a></span><span class= " api - key " ></span><span class= " app - name " ></span><input value= " Revoke " type= " button " class= " revoke btn btn - inline " ></div>
<div id="qr-body"></div>
#set $ tip_addkeys = ' '
#for $ appname , $ uid in $ api_keys
#if $ appname and $ uid
<div class="grey-text"><span class="qr-btn"><a data-src=" #qr - body " data-api-name= " $ appname " data-api-key= " $ uid " rel= " qr " name= " qr " title= " API key QR code " ><span class= " glyphicon glyphicon - qrcode " ></span></a></span><span class= " api - key " >$uid</span><span class= " app - name " >$appname</span><input value= " Revoke " type= " button " class= " revoke btn btn - inline " ></div>
#set $ tip_addkeys = ' style= " display:none " '
#end if
#end for
<div id="tip-addkeys" $ tip_addkeys >Keys used by 3rd party programs to access SickGear will list here when generated</div>
</div>
</span>
</label>
</div>
</div>
<div class="field-pair">
<label for="web_port">
<span class="component-title">HTTP port</span>
<span class="component-desc">
<input type="text" name="web_port" id="web_port" value=" $ sg_var ('WEB_PORT', 8081)" class="form-control input-sm input100">
<p>web port to access and browse SickGear (default:8081)</p>
</span>
</label>
</div>
<div class="field-pair">
<label for="web_log">
<span class="component-title">HTTP logs</span>
<span class="component-desc">
<input type="checkbox" name="web_log" id="web_log" #echo ( ' ' , $ checked ) [ $ sg_var ( ' WEB_LOG ' ) ] # >
<p>enable logs from the internal web server</p>
</span>
</label>
</div>
<div class="field-pair">
<label for="enable_https">
<span class="component-title">SSL enable</span>
<span class="component-desc">
<input type="checkbox" name="enable_https" class="enabler" id="enable_https" #echo ( ' ' , $ checked ) [ $ sg_var ( ' ENABLE_HTTPS ' ) ] # >
<p>use a HTTPS address to access the web interface</p>
</span>
</label>
</div>
<div id="content_enable_https">
<div class="field-pair">
<label for="https_cert">
<span class="component-title">HTTPS certificate</span>
<span class="component-desc">
<input type="text" name="https_cert" id="https_cert" value=" $ sg_str ('HTTPS_CERT')" class="form-control input-sm input300">
<div class="clear-left"><p>file name or path to a <b class="boldest">server.crt</b> certificate file</p></div>
</span>
</label>
</div>
<div class="field-pair">
<label for="https_key">
<span class="component-title">HTTPS key</span>
<span class="component-desc">
<input type="text" name="https_key" id="https_key" value=" $ sg_str ('HTTPS_KEY')" class="form-control input-sm input300">
<div class="clear-left"><p>file name or path to a <b class="boldest">server.key</b> file</p></div>
</span>
</label>
</div>
</div>
<div class="field-pair">
<label for="web_ipv6">
<span class="component-title">Listen on IPv6</span>
<span class="component-desc">
<input type="checkbox" name="web_ipv6" id="web_ipv6" class="enabler" #echo ( ' ' , $ checked ) [ $ sg_var ( ' WEB_IPV6 ' ) ] # >
<p>attempt binding to any available IPv6 address</p>
</span>
</label>
</div>
<div id="content_web_ipv6">
<div class="field-pair" style="margin-top:-24px">
<label for="web_ipv64">
<span class="component-desc">
<input type="checkbox" name="web_ipv64" id="web_ipv64" #echo ( ' ' , $ checked ) [ $ sg_var ( ' WEB_IPV64 ' ) ] # >
<p>also listen on IPv4</p>
</span>
</label>
</div>
</div>
<div class="field-pair">
<label for="handle_reverse_proxy">
<span class="component-title">Reverse proxy headers</span>
<span class="component-desc">
<input type="checkbox" name="handle_reverse_proxy" id="handle_reverse_proxy" #echo ( ' ' , $ checked ) [ $ sg_var ( ' HANDLE_REVERSE_PROXY ' ) ] # >
<p>accept the following reverse proxy headers (advanced)...<br />(X-Forwarded-For, X-Forwarded-Host, and X-Forwarded-Proto)</p>
</span>
</label>
</div>
<div class="field-pair">
<label for="send_security_headers">
<span class="component-title">Send security headers</span>
<span class="component-desc">
<input type="checkbox" name="send_security_headers" id="send_security_headers" #echo ( ' ' , $ checked ) [ $ sg_var ( ' SEND_SECURITY_HEADERS ' ) ] # >
<p>send the following headers to increase browser security...<br />(X-Frame-Options:SAMEORIGIN)</p>
</span>
</label>
</div>
<div class="field-pair">
<label for="allow_anyip">
<span class="component-title">Allow IP use for connections</span>
<span class="component-desc">
<input type="checkbox" name="allow_anyip" id="allow_anyip" #echo ( ' ' , $ checked ) [ $ sg_var ( ' ALLOW_ANYIP ' ) ] # >
<p>disable to only accept "Allowed browser hostnames" for connections<br>
Warning: Kodi Add-on requires IP and will correctly fail with this disabled</p>
</span>
</label>
</div>
<div class="field-pair">
<label for="allowed_hosts">
<span class="component-title">Allowed browser hostnames</span>
<span class="component-desc">
<input type="text" name="allowed_hosts" id="allowed-hosts" value=" $ sg_str ('ALLOWED_HOSTS')" class="form-control input-sm input300">
<p>blank for insecure allow all</p>
<div class="clear-left"><p>allowed names that browse the interface (e.g. $ request_host , my_hostname)</p></div>
</span>
</label>
</div>
<input type="submit" class="btn config_submitter" value="Save Changes">
</fieldset>
</div><!-- /component-group2 //-->
</div>
<div id="core-component-group3" class="component-group">
<div class="component-group-desc">
<h3>Advanced</h3>
</div>
<fieldset class="component-group-list">
#if not $ sg_var ( ' EXT_UPDATES ' )
<div class="field-pair">
<label>
<span class="component-title">Branch version:</span>
<span class="component-desc">
<select id="branchVersion" class="form-control form-control-inline input-sm pull-left max300">
<option>Loading list from github</option>
</select>
<input class="btn btn-inline" style="margin-left:6px" type="button" id="branch-checkout" value="Checkout Branch" disabled="disabled">
<div class="clear-left"><p>select branch to use (restart required)</p></div>
</span>
</label>
</div>
#if $ sg_str ( ' BRANCH ' , ' main ' ) != ' main '
<div class="field-pair">
<label>
<span class="component-title">Pull request:</span>
<span class="component-desc">
<select id="pullRequestVersion" class="form-control form-control-inline input-sm pull-left max300">
<option>Loading list from github</option>
</select>
<input class="btn btn-inline" style="margin-left: 6px;" type="button" id="pull-request-checkout" value="Checkout Pull Request" disabled="disabled">
<div class="clear-left"><p>select pull request to test (restart required)</p></div>
</span>
</label>
</div>
#end if
<div class="field-pair">
<label for="git_remote">
<span class="component-title">Git remote for branch</span>
<span class="component-desc">
<input type="text" name="git_remote" id="git_remote" value=" $ sg_str ('GIT_REMOTE')" class="form-control input-sm input300">
<div class="clear-left"><p>default:origin. Access repo configured remotes (save then refresh browser)</p></div>
</span>
</label>
</div>
<div class="field-pair">
<label>
<span class="component-title">Git executable path</span>
<span class="component-desc">
<input type="text" name="git_path" value=" $ sg_str ('GIT_PATH')" class="form-control input-sm input300">
<div class="clear-left"><p>only needed if OS is unable to locate git from env</p></div>
</span>
</label>
</div>
#end if
<div class="field-pair">
<label>
<span class="component-title">CPU throttling:</span>
<span class="component-desc">
<select id="cpu_presets" name="cpu_preset" class="form-control input-sm">
#for $ cur_preset in $ sorted ( $ cpu_presets . items ( ) , key = $ operator . itemgetter ( 1 ) , reverse = True )
<option value=" $ cur_preset [0]" #echo ( ' ' , $ selected ) [ $ cur_preset [ 0 ] == $ sg_str ( ' CPU_PRESET ' , ' DISABLED ' ) ] # > $ cur_preset [0].capitalize()</option>
#end for
</select>
<span>Disabled (default). High is lower and Low is higher CPU use</span>
</span>
</label>
</div>
<div class="field-pair">
<label>
<span class="component-title">Anonymous redirect</span>
<span class="component-desc">
<input type="text" name="anon_redirect" value=" $ sg_str ('ANON_REDIRECT')" class="form-control input-sm input300">
<div class="clear-left"><p>backlink protection via anonymizer service, must end in "?"</p></div>
</span>
</label>
</div>
<div class="field-pair">
<label for="encryption_version">
<span class="component-title">Encrypt passwords</span>
<span class="component-desc">
<input type="checkbox" name="encryption_version" id="encryption_version" #echo ( ' ' , $ checked ) [ $ sg_var ( ' ENCRYPTION_VERSION ' ) ] # >
<p>in the <code>config.ini</code> file.
<b>Warning:</b> Passwords must only contain <a target="_blank" href="<%= anon_url('http://en.wikipedia.org/wiki/ASCII #ASCII _printable_characters ' ) % > " >ASCII characters</a></p>
</span>
</label>
</div>
<div class="field-pair">
<label>
<span class="component-title">Proxy host</span>
<span class="component-desc">
<input type="text" name="proxy_setting" value=" $ sg_str ('PROXY_SETTING')" class="form-control input-sm input300">
<p>blank to disable</p>
<div class="clear-left"><p>proxy address for connecting to providers (use 'PAC:Url' for PAC support)<br>
e.g. socks5://host:port, socks5://user:pass@host:port, socks4a://user:pass@host:port</p></div>
</span>
</label>
</div>
<div class="field-pair">
<label for="proxy_indexers">
<span class="component-title">Use proxy for indexers</span>
<span class="component-desc">
<input type="checkbox" name="proxy_indexers" id="proxy_indexers" #echo ( ' ' , $ checked ) [ True == $ sg_var ( ' PROXY_INDEXERS ' ) ] # >
<p>use proxy host for TV info source connections</p>
</span>
</label>
</div>
<div class="field-pair">
<label>
<span class="component-title">File logging level:</span>
<span class="component-desc">
<select id="file_logging_presets" name="file_logging_preset" class="form-control input-sm">
#set $ levels = $ list_keys ( file_logging_presets )
#set void = $ levels . sort ( key = lambda x : $ file_logging_presets [ $ x ] )
#set $ level_count = len ( $ levels )
#for $ level in $ levels
#set $ level_title = $ level . title ( ) . upper ( )
#set $ level_count - = 1
#if ' DB ' == $ level_title
#continue
#end if
#set $ level_text = ' %s %s ' % ( $ level . title ( ) , ( ( ' ' , ' only ' ) [ 0 == $ level_count ] , ' and the next %s level %s ' % ( ( ' ' + str ( $ level_count ) , ' ' ) [ 1 == $ level_count ] , maybe_plural ( $ level_count ) ) ) [ 0 < $ level_count ] )
<option value=" $ level_title " #echo ( ' ' , $ selected ) [ $ level_title == $ sg_str ( ' FILE_LOGGING_PRESET ' , ' DB ' ) ] # > $ level_text </option>
#end for
</select>
<span>(default: Debug)</span>
<p>enable Debug to pin down an issue, the others are for light use</p>
</span>
</label>
</div>
#if $ db_supports_backup
<div class="field-pair">
<label for="backup_db_oneday">
<span class="component-title">Backup database plan</span>
<span class="component-desc">
<input type="checkbox" name="backup_db_oneday" id="backup_db_oneday" #echo ( ' ' , $ checked ) [ True == $ sg_var ( ' BACKUP_DB_ONEDAY ' ) ] # >
<p>backup one day instead of multiple days (helps existing backup strategies)</p>
</span>
</label>
</div>
#end if
<input type="submit" class="btn config_submitter" value="Save Changes">
</fieldset>
</div><!-- /component-group3 //-->
<br/>
<h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path"> $ sg_str ('DATA_DIR')</span></b></h6>
<input type="submit" class="btn pull-left config_submitter button" value="Save Changes">
</div><!-- /config-components -->
</form>
</div>
</div>
<div></div>
<script type="text/javascript" charset="utf-8">
<!--
jQuery(' #log _dir ' ).fileBrowser( { title: ' Select log file folder location ' });
jQuery(' #config - components ' ).tabs();
//-->
</script>
#include $ os . path . join ( $ sg_str ( ' PROG_DIR ' ) , ' gui/slick/interfaces/default/inc_bottom.tmpl ' )