mirror of
https://github.com/SickGear/SickGear.git
synced 2024-12-27 05:03:37 +00:00
e56303798c
Initial SickGear for Python 3.
631 lines
32 KiB
Cheetah
631 lines
32 KiB
Cheetah
#import re
|
|
#import sickgear
|
|
#from sickgear import TVInfoAPI, indexermapper, network_timezones
|
|
#from sickgear.common import Overview, qualityPresets, qualityPresetStrings, \
|
|
Quality, statusStrings, WANTED, SKIPPED, ARCHIVED, IGNORED, FAILED, DOWNLOADED
|
|
#from sickgear.helpers import anon_url, get_size, human, maybe_plural, generate_word_str
|
|
#from sickgear.indexers.indexer_config import TVINFO_TVDB, TVINFO_IMDB
|
|
#from six import iteritems
|
|
<% def sg_var(varname, default=False): return getattr(sickgear, varname, default) %>#slurp#
|
|
<% def sg_str(varname, default=''): return getattr(sickgear, varname, default) %>#slurp#
|
|
##
|
|
#set global $title = getattr($show_obj, 'unique_name', $show_obj.name)
|
|
#set global $topmenu = 'home'
|
|
#set $exceptions_string = ', '.join($show_obj.exceptions)
|
|
#set $css = $getVar('css', 'reg')
|
|
#set $has_art = $getVar('has_art', None)
|
|
#set $restart = 'Restart SickGear for new features on this page'
|
|
#set $show_message = ($show_message, $restart)[None is $has_art]
|
|
#set global $page_body_attr = 'display-show" class="' + $css
|
|
#set theme_suffix = ('', '-dark')['dark' == $sg_str('THEME_NAME', 'dark')]
|
|
##
|
|
#import os.path, os, re
|
|
#set global $inc_top_glide = True
|
|
#set global $inc_ofi = True
|
|
#include $os.path.join($sg_str('PROG_DIR'), 'gui/slick/interfaces/default/inc_top.tmpl')
|
|
<script type="text/javascript" src="$sbRoot/js/cast.js?v=$sbPID"></script>
|
|
|
|
<input type="hidden" id="sbRoot" value="$sbRoot">
|
|
<script>
|
|
<!--
|
|
var config = {
|
|
hasArt: #echo ('!0', '!1')[not $has_art]#,
|
|
TVShowList: ${tvshow_id_csv},
|
|
useIMDbInfo: #echo ('!1', '!0')[$sg_var('USE_IMDB_INFO')]
|
|
}
|
|
|
|
\$.SickGear.config = {
|
|
useFuzzy: #echo ('!1', '!0')[$sg_var('FUZZY_DATING')]##if $sg_var('FUZZY_DATING')#,
|
|
dateFormat: '$sg_str('DATE_PRESET', '%x')',
|
|
timeFormat: '$sg_str('TIME_PRESET', '%I:%M %p')',
|
|
fuzzyTrimZero: #echo ('!1', '!0')[$sg_var('TRIM_ZERO')]##end if#,
|
|
glideStartAt: '#echo $sg_var('DISPLAY_SHOW_GLIDE', {}).get($show_obj.tvid_prodid, {}).get('start_at', '')#',
|
|
glideSlideTime: #echo $sg_var('DISPLAY_SHOW_GLIDE_SLIDETIME')#
|
|
}
|
|
//-->
|
|
</script>
|
|
<script type="text/javascript" src="$sbRoot/js/displayShow.js?v=$sbPID"></script>
|
|
<script type="text/javascript" src="$sbRoot/js/plotTooltip.js?v=$sbPID"></script>
|
|
<script type="text/javascript" src="$sbRoot/js/sceneExceptionsTooltip.js?v=$sbPID"></script>
|
|
#if $sg_var('USE_IMDB_INFO')
|
|
<script type="text/javascript" src="$sbRoot/js/ratingTooltip.js?v=$sbPID"></script>
|
|
#end if
|
|
<script type="text/javascript" src="$sbRoot/js/ajaxEpSearch.js?v=$sbPID"></script>
|
|
<script type="text/javascript" src="$sbRoot/js/ajaxEpSubtitles.js?v=$sbPID"></script>
|
|
<script type="text/javascript" src="$sbRoot/js/lib/jquery.bookmarkscroll.js?v=$sbPID"></script>
|
|
<script type="text/javascript" src="$sbRoot/js/lib/jquery.collapser.min.js?v=$sbPID"></script>
|
|
<script src="$sbRoot/js/lib/select2.full.min.js"></script>
|
|
|
|
<link href="$sbRoot/css/lib/select2.css" rel="stylesheet">
|
|
<style>
|
|
.bfr{position:absolute;left:-999px;top:-999px}.bfr img,.spinner,.spinner2,img.queued,img.search,img.success,img.upgrade{display:inline-block;width:16px;height:16px}.spinner{background:url(${sbRoot}/images/loading16${theme_suffix}.gif) no-repeat 0 0}.spinner2{background:url(${sbRoot}/images/loading16-red.gif) no-repeat 0 0}img.queued{background:url(${sbRoot}/images/queued.png) no-repeat 0 0}img.search{background:url(${sbRoot}/images/search16.png) no-repeat 0 0}img.success{background:url(${sbRoot}/images/down-success.png) no-repeat 0 0}img.upgrade{background:url(${sbRoot}/images/down-upgrade.png) no-repeat 0 0}
|
|
.images i{margin-right:6px;margin-top:5px}.hide{display:none}
|
|
.tvshowImg{border:1px solid transparent;min-width:226px;min-hieght:332px}.spinner2{margin-top:3px !important}
|
|
.select2-results__group{color: #eee; background-color: rgb(51,51,51)}
|
|
.select2-results__options .select2-results__option{color: #222; background-color: #ddd}
|
|
.select2-results__options .select2-results__option .ended{color: #888}
|
|
#select2-pickShow-results .select2-results__option .ended .label{background-color: #888; padding: 1px 4px; margin-right: 2px; line-height: 2; color: #ddd !important}
|
|
.select2-container--default .select2-results > .select2-results__options{max-height: 300px}
|
|
#select2-pickShow-results .select2-results__option,
|
|
#select2-pickShow-results .select2-results__group{padding-top: 2px !important; padding-bottom:2px !important}
|
|
#select2-pickShow-results .select2-results__option--highlighted.select2-results__option--selectable .ended{color:white}
|
|
#select2-pickShow-results .select2-results__option--selected,
|
|
#select2-pickShow-results .select2-results__option--selected span{color:rgb(143, 21, 21) !important}
|
|
</style>
|
|
<div class="bfr"><img src="$sbRoot/images/loading16${theme_suffix}.gif"><img src="$sbRoot/images/loading16-red.gif"><img src="$sbRoot/images/queued.png"><img src="$sbRoot/images/search16.png"><img src="$sbRoot/images/no16.png"><img src="$sbRoot/images/yes16.png"><img src="$sbRoot/images/down-success.png"><img src="$sbRoot/images/down-upgrade.png"></div>
|
|
|
|
<div id="background-container">
|
|
#if $has_art
|
|
<ul>
|
|
#for $k, ($image, $rating) in enumerate($fanart)
|
|
<li class="#echo ' '.join((x for x in ({10:'group', 20:'fave', 30:'avoid'}.get($rating, ''), ('', 'background first-load')[$start_image == $k]) if x)) #" style="background-image:url($sbRoot/show-poster/?tvid_prodid=$show_obj.tvid_prodid&which=fanart_$image)"></li>
|
|
#end for
|
|
</ul>
|
|
#end if
|
|
</div>
|
|
|
|
<div class="displayshow-wrapper">
|
|
<div id="change-show" class="pull-left form-inline">
|
|
Change show:
|
|
#set $displayshowlist = []
|
|
#set $cur_sel = 0
|
|
#for $cur_showlist in $sortedShowLists
|
|
#set $cur_showtype = $cur_showlist[0]
|
|
#set $cur_showlist = $cur_showlist[1]
|
|
#if 1 < len($sortedShowLists)
|
|
#set void = $displayshowlist.append('\t\t\t<optgroup label="%s">' % $cur_showtype)
|
|
#end if
|
|
#for $cur_show_obj in $cur_showlist
|
|
#set $show_ended = '' != $cur_show_obj.status and $cur_show_obj.status in ['ended', 'Ended', 'Canceled']
|
|
#set void = $displayshowlist.append('\t\t\t<option %svalue="%s"%s>%s</option>' % (('', 'class="ended" ')[$show_ended], $cur_show_obj.tvid_prodid, ('', ' selected="selected"')[$cur_show_obj == $show_obj], getattr($cur_show_obj, 'unique_name', $cur_show_obj.name)))
|
|
#end for
|
|
#if 1 < len($sortedShowLists)
|
|
#set void = $displayshowlist.append('\t\t\t</optgroup>')
|
|
#end if
|
|
#end for
|
|
##
|
|
<div id="prevShow" class="navShow addQTip" title="$prev_title"> </div>
|
|
<select id="pickShow" class="form-control form-control-inline input-sm">
|
|
#echo '\n'.join($displayshowlist)#
|
|
</select>
|
|
<div id="nextShow" class="navShow addQTip" title="$next_title"> </div>
|
|
</div>
|
|
|
|
<div class="clearfix" style="margin-bottom:15px"></div>
|
|
|
|
#if $show_message
|
|
<div class="alert alert-info">
|
|
$show_message
|
|
</div>
|
|
|
|
#end if
|
|
<div class="display-show-container">
|
|
<div id="posterCol" class="hidden-xs">
|
|
<a href="$sbRoot/show-poster/?tvid_prodid=$show_obj.tvid_prodid&which=poster" rel="dialog">
|
|
<img src="$sbRoot/show-poster/?tvid_prodid=$show_obj.tvid_prodid&which=poster_thumb" title="View poster for $show_obj.name" class="tvshowImg addQTip" alt="">
|
|
</a>
|
|
</div>
|
|
|
|
<div id="showCol">
|
|
<div class="details-wrapper">
|
|
<div class="details-right top">
|
|
#if 0 < len($seasons)
|
|
#set $show_ended = '' != $show_obj.status and $show_obj.status in ['ended', 'Ended', 'Canceled']
|
|
<div>
|
|
#if $getVar('has_special', 0 == $seasons[-1][0])
|
|
<span class="details-title">Specials</span>
|
|
<span class="details-info">#if $sg_var('DISPLAY_SHOW_SPECIALS')#<a href="#season-0">View</a><span style="margin:0 7px">-</span>#end if#<a class="inner" href="$sbRoot/toggle-specials-view-show/?tvid_prodid=$show_obj.tvid_prodid">#echo ('Show', 'Hide')[$sg_var('DISPLAY_SHOW_SPECIALS')]#</a></span>
|
|
#end if
|
|
</div>
|
|
#set $many_seasons = 12 < len($seasons)
|
|
<div class="details-seasons">
|
|
<span class="details-title#echo ('', ' combo-seasons')[$many_seasons]#">Season</span>
|
|
<span class="details-info">
|
|
#set $season_list = [s[0] for s in $seasons]
|
|
#if $many_seasons
|
|
<select id="seasonJump" class="form-control form-control-inline input-sm">
|
|
<option value="jump">Jump to season</option>
|
|
#for $number in $season_list
|
|
#if 0 != $number
|
|
<option value="#season-$number">Season $number</option>
|
|
#end if
|
|
#end for
|
|
</select>
|
|
#else
|
|
#for $number in $season_list
|
|
#if 0 != $number
|
|
<a href="#season-$number">$number</a>
|
|
#end if
|
|
#end for
|
|
#end if
|
|
</span>
|
|
</div>
|
|
#end if
|
|
</div>
|
|
|
|
<style>
|
|
#showtitle .label{float: left; margin:0 4px 3px 0; padding:6px 4px 5px}
|
|
#showtitle:after{display:block; content:"."; height:0; clear:both; visibility:hidden}
|
|
</style>
|
|
<div id="details-top">
|
|
<div id="showtitle" data-showname="$show_obj.name">
|
|
<h2 class="title" id="scene_exception_$show_obj.tvid_prodid"><span>$show_obj.name</span>#echo ('', '<em id="title-status"> (ended)</em>')[$show_ended]#</h2>
|
|
#set $genres_done = False
|
|
#if $sg_var('USE_IMDB_INFO') and 'genres' in $show_obj.imdb_info and '' != $show_obj.imdb_info['genres']
|
|
#for $imdbgenre in $show_obj.imdb_info['genres'].split('|')
|
|
#set $genres_done = True
|
|
<span class="label"><a href="<%= anon_url('http://www.imdb.com/search/title?at=0&genres=', imdbgenre.lower().replace('-','_'),'&sort=moviemeter,asc&title_type=tv_series') %>" target="_blank" title="View other popular $imdbgenre shows on imdb.com" class="addQTip">$imdbgenre.replace('Sci-Fi','Science-Fiction')</a></span>
|
|
#end for
|
|
#end if
|
|
#if not $genres_done and $show_obj.genre
|
|
#for $genre in $show_obj.genre.split('|')
|
|
#set $genres_done = True
|
|
<span class="label">$genre</span>
|
|
#end for#
|
|
#end if
|
|
#if not $genres_done
|
|
<span class="label">No genres</span>
|
|
#end if
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="details-wrapper">
|
|
<div class="details-right">
|
|
#if int($show_obj.paused)
|
|
<div class="paused-holder">
|
|
<div class="paused paused-highlight">
|
|
<i class="sgicon-pause paused-outline"></i>
|
|
</div>
|
|
</div>
|
|
#end if
|
|
<div>
|
|
<span class="details-title">Links</span>
|
|
<span class="details-info">
|
|
<style>
|
|
.main span{border-bottom:1px solid #0a0}
|
|
</style>
|
|
#set $tvdb_id = None
|
|
#for $src_id, $src_name in iteritems($TVInfoAPI().all_sources)
|
|
#if $TVInfoAPI($src_id).config.get('defunct') and $src_id != $show_obj.tvid
|
|
#continue
|
|
#end if
|
|
#if $src_id in $show_obj.ids and $show_obj.ids[$src_id].get('id', 0) > 0 and $indexermapper.MapStatus.NOT_FOUND != $show_obj.ids[$src_id]['status']
|
|
#if $TVINFO_TVDB == $src_id
|
|
#set $tvdb_id = $show_obj.ids[$src_id]['id']
|
|
#end if
|
|
#if $TVINFO_IMDB == $src_id and not $sg_var('USE_IMDB_INFO')
|
|
#continue
|
|
#end if
|
|
#if not $TVInfoAPI($src_id).config.get('defunct')
|
|
<a class="service addQTip#if $show_obj.tvid == $src_id# main#end if#" href="$anon_url($TVInfoAPI($src_id).config['show_url'] % $show_obj.ids[$src_id]['id'])" rel="noreferrer" onclick="window.open(this.href, '_blank'); return !1;" title="View $src_name info in new tab">
|
|
#else#
|
|
<a class="service addQTip" href="$sbRoot/home/edit-show?tvid_prodid=$show_obj.tvid_prodid#core-component-group3" title="Edit related show IDs">
|
|
#end if#
|
|
<span><img alt="$src_name" height="16" width="16" src="$sbRoot/images/$TVInfoAPI($src_id).config['icon']" /></span>
|
|
</a>
|
|
#end if
|
|
#end for
|
|
#if $has_art and $tvdb_id
|
|
<a class="service addQTip" href="$anon_url('https://fanart.tv/series/', $tvdb_id)" rel="noreferrer" onclick="window.open(this.href, '_blank'); return !1;" title="View Fanart.tv info in new tab">
|
|
<img alt="Fanart.tv" height="16" width="16" src="$sbRoot/images/fanart.png" />
|
|
</a>
|
|
#end if
|
|
#if $xem_numbering or $xem_absolute_numbering
|
|
<a class="service addQTip" href="$anon_url('http://thexem.info/search?q=', $show_obj.name)" rel="noreferrer" onclick="window.open(this.href, '_blank'); return !1;" title="View XEM info in new tab"><img alt="[xem]" height="16" width="16" src="$sbRoot/images/xem.png" /></a>
|
|
#end if
|
|
</span>
|
|
</div>
|
|
|
|
#set $startyear, $flags, $runtime = (None, False, None)
|
|
#if $sg_var('USE_IMDB_INFO') and $show_obj.imdbid
|
|
#if 'year' in $show_obj.imdb_info
|
|
#set $startyear = $show_obj.imdb_info['year'] or None
|
|
#end if
|
|
#set $flags = 'country_codes' in $show_obj.imdb_info and '' != $show_obj.imdb_info['country_codes']
|
|
#if 'runtimes' in $show_obj.imdb_info
|
|
#set $runtime = $show_obj.imdb_info['runtimes'] or 0
|
|
#set $episode_count = $show_obj.imdb_info['episode_count'] or 0
|
|
## test if average mini-series runtime is reasonable before using it,
|
|
## apply only to a runtime > 60 minutes, and assume 9.x minutes is the minimum (e.g. robot chicken)
|
|
#if $show_obj.imdb_info['is_mini_series'] and 1 < $episode_count \
|
|
and $runtime and 90 < $runtime:
|
|
#set $average_runtime = $runtime/$episode_count
|
|
#if 9 < $average_runtime:
|
|
#set $runtime = '%s (av %s?)' % ($runtime, int($average_runtime))
|
|
#end if
|
|
#end if
|
|
#end if
|
|
#end if
|
|
#if None is $startyear and $show_obj.startyear
|
|
#set $startyear = $show_obj.startyear
|
|
#end if
|
|
#if None is $runtime and $show_obj.runtime
|
|
#set $runtime = $show_obj.runtime
|
|
#end if
|
|
#if $startyear or $flags
|
|
<div>
|
|
<span class="details-title">Premiered</span>
|
|
<span class="details-info">
|
|
<span class="space-right">#echo ($startyear, 'Unknown')[None is $startyear]#</span>
|
|
#if $flags
|
|
#for $country in $show_obj.imdb_info['country_codes'].split('|')
|
|
<img class="flag space-right" src="$sbRoot/images/flags/${$country.lower()}.png" width="16" height="11" />
|
|
#end for
|
|
#end if
|
|
</span>
|
|
</div>
|
|
#end if
|
|
|
|
#if $show_obj.airs
|
|
#set $showairs = '%s%s' % ($re.sub(r'(?:s|nes|rs|ur)?day', '', $re.sub(r'(y)[^\w]+', r'\1, ', $show_obj.airs)),
|
|
('', ' <span class="red-text" style="font-weight:bold">(invalid timeformat)</span>')[not $network_timezones.test_timeformat($show_obj.airs)])
|
|
#set $showairs = $showairs.replace('Sat, Sun', 'Sat - Sun').replace('Mon, Tue, Wed, Thu, Fri', 'Mon - Fri').replace('Mon, Tue, Wed, Thu', 'Mon - Thu').replace('Tue, Wed, Thu', 'Tue - Thu')
|
|
<div>
|
|
<span class="details-title">Air#echo ('s', 'ed')[$show_ended]#</span>
|
|
<span class="details-info">$showairs</span>
|
|
</div>
|
|
#end if
|
|
|
|
#if $show_obj.network
|
|
<div>
|
|
<span class="details-title">Network</span>
|
|
<span class="details-info">$show_obj.network</span>
|
|
</div>
|
|
#end if
|
|
#if None is not $runtime
|
|
<div>
|
|
<span class="details-title">Runtime</span>
|
|
<span class="details-info">$runtime mins.</span>
|
|
</div>
|
|
#end if
|
|
#if $show_obj.status
|
|
<div>
|
|
<span class="details-title">Status</span>
|
|
<span class="details-info">$show_obj.status</span>
|
|
</div>
|
|
#end if
|
|
|
|
#if $sg_var('USE_IMDB_INFO') and 'rating' in $show_obj.imdb_info
|
|
<div>
|
|
<span class="details-title">IMDb rating</span>
|
|
<span class="details-info">
|
|
#if $show_obj.imdb_info['votes']
|
|
#set $rating_tip = '%s of 10 stars<br />%s votes' % (str($show_obj.imdb_info['rating']), str($show_obj.imdb_info['votes']))
|
|
<span class="imdbstars" qtip-content="$rating_tip">$show_obj.imdb_info['rating']</span>
|
|
#else
|
|
<span>No votes available</span>
|
|
#end if
|
|
</span>
|
|
</div>
|
|
#end if
|
|
|
|
#set $anyQualities, $bestQualities = $Quality.splitQuality(int($show_obj.quality))
|
|
#if $show_obj.quality in $qualityPresets
|
|
<div>
|
|
<span class="details-title">Quality</span>
|
|
<span class="details-info">
|
|
<span class="quality $qualityPresetStrings[$show_obj.quality]">$qualityPresetStrings[$show_obj.quality]</span>
|
|
</span>
|
|
</div>
|
|
#else
|
|
#if $anyQualities
|
|
<div>
|
|
<span class="details-title">Qualities</span>
|
|
<span class="details-info">
|
|
#echo ', '.join([$Quality.get_quality_ui($x) for $x in sorted($anyQualities)])#
|
|
</span>
|
|
</div>
|
|
#end if
|
|
#if $bestQualities
|
|
<div>
|
|
<span class="details-title">Upgrade to</span>
|
|
<span class="details-info">
|
|
#echo ', '.join([$Quality.get_quality_ui($x) for $x in sorted($bestQualities)])#
|
|
</span>
|
|
</div>
|
|
#end if
|
|
#end if
|
|
</div>
|
|
|
|
<div id="details-left">
|
|
#set $has_overview = '' != $show_obj.overview
|
|
#set $ep_tally = ('', '(<span class="hint">%s episodes</span>)' % $ep_counts['eps_all'])[0 < $ep_counts['eps_all']]
|
|
<div class="#echo ('no', 'details')[$has_overview]#-plot">
|
|
#set $cast_list = $show_obj.cast_list
|
|
#if $cast_list
|
|
<%
|
|
def param(visible=True, rid=None, cache_person=None, cache_char=None, person=None, role=None, tvid_prodid=None, thumb=None, oid=None, pid=None):
|
|
"""
|
|
make the url param list
|
|
"""
|
|
if cache_char or role:
|
|
oid = ('oid=%s' % oid, '')[not visible or None is oid or str(rid) == str(oid)]
|
|
return ('imagecache/character?', '')[not cache_char] + '&'.join([kv for kv in ('rid=%s' % rid, 'tvid_prodid=%s' % (cache_char or role).tvid_prodid, ('', 'thumb=%s' % thumb)[not role and None is not thumb], ('person_id=%s' % pid, '')[not pid], ('prefer_person=1', '')[not pid], oid) if kv])
|
|
if cache_person:
|
|
oid = ('oid=%s' % oid, '')[not visible or None is oid or str(rid) == str(oid)]
|
|
return 'imagecache/person?' + '&'.join([kv for kv in ('pid=%s' % rid, ('', 'thumb=%s' % thumb)[None is not thumb], oid) if kv])
|
|
if person:
|
|
oid = ('oid=%s' % person.id, '')[not visible or str(person.ref_id()) == str(person.id)]
|
|
return '&'.join([kv for kv in ('rid=%s' % person.ref_id(), oid) if kv])
|
|
return 'param not implemented properly'
|
|
%>
|
|
#set $cast = {'1st': [], '2nd': []}
|
|
#for $cur_cast in $cast_list
|
|
#set $cast[('1st', '2nd')[not $cur_cast.name]] += [$cur_cast]
|
|
#end for
|
|
<div class="contain-glide">
|
|
<span class="cast-holder glide--swipeable">
|
|
<div class="cast-panel glide__track" data-glide-el="track">
|
|
<ul class="glide__slides">
|
|
#for $cur_cast in $cast['1st'] + $cast['2nd']
|
|
#set $by_people = [] if not $cur_cast.person else [$cur_person.name for $cur_person in $cur_cast.person]
|
|
#set $by_people = ', '.join($by_people if 2 > len($by_people) else $by_people[0:-1] + ['and ' + $by_people[-1]])
|
|
#set $caption = ' '.join(([] if not $cur_cast.name else [$cur_cast.name]) + ([] if not $by_people else ['by', $by_people])).replace('"', '"')
|
|
<li class="cast body glide__slide" data-rid="$next($iter($cur_cast.person)).ref_id()">
|
|
<a class="thumb" href="$sbRoot/$param(rid=$cur_cast.ref_id(), cache_char=$show_obj, thumb=0, oid=$cur_cast.id)"#if $caption# data-caption="$caption"#end if# rel="glide"><img class="cast-bg" style="display:none" height="150" src="$sbRoot/$param(False, rid=$cur_cast.id, cache_char=$show_obj)"#if $cur_cast.name# alt=""#end if#></a>
|
|
<div class="links" style="display:none">
|
|
#if $cur_cast.name
|
|
#set $name = ($cur_cast.name, 'themself')[$cur_cast.name == (('', $cur_cast.person[0].name)[1 == len($cur_cast.person)])]
|
|
<div class="role">#if not $cur_cast.id#$cur_cast.name#else#<a href="$sbRoot/home/role?$param(rid=$cur_cast.ref_id(), role=$show_obj, oid=$cur_cast.id)">$name</a>#end if#</div>
|
|
#else
|
|
<div class="role">unknown name</div>
|
|
#end if
|
|
#set $p_count = len($cur_cast.person)
|
|
#for $p_num, $cur_person in enumerate($cur_cast.person, 1)
|
|
<div class="person">#if not $cur_cast.id#$cur_person.name#else#<a href="$sbRoot/home/person?$param(person=$cur_person)">$cur_person.name</a>#end if##if $p_num < $p_count#<span>, </span>#end if#</div>
|
|
#end for
|
|
</div>
|
|
</li>
|
|
#end for
|
|
</ul>
|
|
</div>
|
|
<div class="glide-arrows" data-glide-el="controls" style="display:none">
|
|
<button class="glide-prev" data-glide-dir="<"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24"><path d="M0 12l10.975 11 2.848-2.828-6.176-6.176H24v-3.992H7.646l6.176-6.176L10.975 1 0 12z" /></svg></button>
|
|
<button class="glide-next" data-glide-dir=">"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24"><path d="M13.025 1l-2.847 2.828 6.176 6.176h-16.354v3.992h16.354l-6.176 6.176 2.847 2.828 10.975-11z" /></svg></button>
|
|
</div>
|
|
<button id="pin-glide" class="one addQTip boldest" style="display:none" title="10s, 6s, 3s, then II to save position"><i class="sgicon-pause one"></i><i class="two">10</i><i class="three">6</i><i class="four">3</i></button>
|
|
</span>
|
|
</div><!-- contain-glide -->
|
|
|
|
<span id="about-hide"><br><br></span>
|
|
<span id="about-show" class="hide">
|
|
#else
|
|
<span id="about-show">
|
|
#end if
|
|
$ep_tally
|
|
#if $has_overview
|
|
$show_obj.overview
|
|
#else
|
|
#echo ('', '<br><br>')[any($ep_tally)]
|
|
#if $show_ended
|
|
#if $varExists('force_update')
|
|
A <a href="$sbRoot/$force_update" title="Trigger force full update">force full update</a> may return a plot overview for this ended show
|
|
#else
|
|
Restart SickGear to get a new link here for this ended show
|
|
#end if
|
|
#else
|
|
No plot overview available
|
|
#end if
|
|
#end if
|
|
</span>
|
|
</div>
|
|
|
|
<div id="details-bottom">
|
|
<span class="label addQTip" title="Info language, $show_obj.lang"><img src="$sbRoot/images/flags/${show_obj.lang}.png" width="16" height="11" alt="" style="margin-top:-1px" /></span>
|
|
<span class="label addQTip" title="Location#echo (' no longer exists" style="background-color:#8f1515"', '"')[$showLoc[1]]#>$showLoc[0]</span>
|
|
<span id="data-size" class="label" style="cursor:help">$human($get_size($showLoc[0]))</span>
|
|
#set $filecount = sum([$c for $k, $c in $ep_counts['videos'].items()])
|
|
#set $to_prune = $show_obj.prune - $filecount
|
|
#set $keep_or_prune = ('', ' (%s)' % ('%s to prune' % abs($to_prune), 'keep %s' % $show_obj.prune)[0 <= $to_prune])[bool($show_obj.prune)]
|
|
<span class="label addQTip" title="Videos">#echo '%s file%s%s' % (('No', $filecount)[0 < $filecount], $maybe_plural($filecount), $keep_or_prune)#</span>
|
|
#if $show_obj.paused
|
|
<span class="label label-paused">Paused</span>
|
|
#end if
|
|
#if ($anyQualities + $bestQualities) and int($show_obj.upgrade_once)
|
|
<span class="label">Upgrade once</span>
|
|
#end if
|
|
#if $show_obj.exceptions
|
|
<span class="label addQTip" title="$exceptions_string.replace(', ', '<br />')">Scene names</span>
|
|
#end if
|
|
#if $show_obj.rls_ignore_words
|
|
<span class="label addQTip" title="#echo $generate_word_str($show_obj.rls_ignore_words, $show_obj.rls_ignore_words_regex, join_chr='<br />')#">Ignored words</span>
|
|
#end if
|
|
#if $show_obj.rls_require_words
|
|
<span class="label addQTip" title="#echo $generate_word_str($show_obj.rls_require_words, $show_obj.rls_require_words_regex, join_chr='<br />')#">Required words</span>
|
|
#end if
|
|
#if $show_obj.rls_global_exclude_ignore
|
|
<span class="label addQTip" title="#echo $generate_word_str($show_obj.rls_global_exclude_ignore, join_chr='<br />')#">Excluded global ignored words</span>
|
|
#end if
|
|
#if $show_obj.rls_global_exclude_require
|
|
<span class="label addQTip" title="#echo $generate_word_str($show_obj.rls_global_exclude_require, join_chr='<br />')#">Excluded global required words</span>
|
|
#end if
|
|
#if $show_obj.flatten_folders or $sg_var('NAMING_FORCE_FOLDERS')
|
|
<span class="label">Flat folders</span>
|
|
#end if
|
|
#if int($show_obj.air_by_date)
|
|
<span class="label">Air by date</span>
|
|
#end if
|
|
#if int($show_obj.dvdorder)
|
|
<span class="label">DVD order</span>
|
|
#end if
|
|
#if int($show_obj.scene)
|
|
<span class="label">Scene numbering</span>
|
|
#end if
|
|
#if $sg_var('USE_SUBTITLES') and int($show_obj.subtitles)
|
|
<span class="label">Subtitles</span>
|
|
#end if
|
|
#if int($show_obj.is_sports)
|
|
<span class="label">Sports</span>
|
|
#end if
|
|
#if int($show_obj.is_anime)
|
|
<span class="label">Anime</span>
|
|
#end if
|
|
#if $anigroups and $anigroups.allowlist
|
|
<span class="label addQTip" title="#echo ', '.join($anigroups.allowlist).replace(',', '<br />')#">Wanted group$maybe_plural(len($anigroups.allowlist))</span>
|
|
#end if
|
|
#if $anigroups and $anigroups.blocklist
|
|
<span class="label addQTip" title="#echo ', '.join($anigroups.blocklist).replace(',', '<br />')#">Unwanted group$maybe_plural(len($anigroups.blocklist))</span>
|
|
#end if
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="clearfix"></div>
|
|
|
|
<div id="change-status" class="pull-left">
|
|
<p style="margin-bottom:5px">Change selected episodes to</p>
|
|
<select id="statusSelect" class="form-control form-control-inline input-sm showlist-select">
|
|
#for $curStatus in [$WANTED, $SKIPPED, $IGNORED, $FAILED]
|
|
<option value="$curStatus">$statusStrings[$curStatus]</option>
|
|
#end for
|
|
<optgroup label="Downloaded">
|
|
#for $curStatus in sorted($Quality.DOWNLOADED)
|
|
#if $DOWNLOADED != $curStatus
|
|
<option value="$curStatus">$re.sub(r'Downloaded\s*\(([^\)]+)\)', r'\1', $statusStrings[$curStatus].replace('SD DVD', 'SD DVD/BR/BD'))</option>
|
|
#end if
|
|
#end for
|
|
<option value="$DOWNLOADED">with archived quality</option>
|
|
</optgroup>
|
|
<optgroup label="Archived with">
|
|
<option value="$ARCHIVED">downloaded quality</option>
|
|
<option value="-$ARCHIVED">default ($min_initial)</option>
|
|
</optgroup>
|
|
</select>
|
|
<input type="hidden" id="tvid-prodid" value="$show_obj.tvid_prodid">
|
|
<input class="btn btn-inline" type="button" id="changeStatus" value="Go">
|
|
</div>
|
|
|
|
<div class="pull-right clearfix" id="checkboxControls">
|
|
<div style="padding-bottom:5px" class="addQTip" title="Filter Episodes">
|
|
<label for="good"><span class="good"><input type="checkbox" id="good" checked="checked"> Downloaded: <b>$ep_counts[$Overview.GOOD]</b></span></label>
|
|
<label for="snatched"><span class="snatched"><input type="checkbox" id="snatched" checked="checked"> Snatched: <b>$ep_counts[$Overview.SNATCHED]</b></span></label>
|
|
<label for="wanted"><span class="wanted"><input type="checkbox" id="wanted" checked="checked"> Wanted: <b>$ep_counts[$Overview.WANTED]</b></span></label>
|
|
<label for="qual"><span class="qual"><input type="checkbox" id="qual" checked="checked"> Low Quality: <b>$ep_counts[$Overview.QUAL]</b></span></label>
|
|
<label for="skipped"><span class="skipped"><input type="checkbox" id="skipped" checked="checked"> Skipped: <b>$ep_counts[$Overview.SKIPPED]</b></span></label>
|
|
</div>
|
|
|
|
<div class="pull-right" >
|
|
<button class="btn btn-xs seriesCheck">Select filtered episodes</button>
|
|
<button class="btn btn-xs clearAll">Clear all</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="clearfix"></div>
|
|
#if not len($seasons)
|
|
<div id="no-episode-data">
|
|
<h3>No episode details at TV info source
|
|
<a class="service" href="$anon_url($TVInfoAPI($show_obj.tvid).config['show_url'] % $show_obj.prodid)" onclick="window.open(this.href, '_blank'); return !1;" title="View $TVInfoAPI($show_obj.tvid).name info in new tab">$TVInfoAPI($show_obj.tvid).name</a>
|
|
</h3>
|
|
</div>
|
|
#else
|
|
#set $working_season = -1
|
|
#set $odd = 0
|
|
#set $scene, $scene_anime = (False, False)
|
|
#if not $show_obj.air_by_date and not $show_obj.is_sports and not $show_obj.is_anime and $show_obj.is_scene
|
|
#set $scene = True
|
|
#elif not $show_obj.air_by_date and not $show_obj.is_sports and $show_obj.is_anime and $show_obj.is_scene
|
|
#set $scene_anime = True
|
|
#end if
|
|
|
|
#for $season, $episodes, $has_season_exceptions in $seasons
|
|
#for $ep in $episodes
|
|
#if None is not $ep
|
|
#set $ep_str = '%sx%s' % ($season, $ep['episode'])
|
|
#if $ep_str not in $ep_cats or (0 == $season and not $sg_var('DISPLAY_SHOW_SPECIALS'))
|
|
#continue
|
|
#end if
|
|
#end if
|
|
|
|
#if $working_season != $season
|
|
#if 0 <= $working_season
|
|
</tbody>
|
|
</table>
|
|
#end if
|
|
#set $working_season = $season
|
|
|
|
#set $human_season = ('Season %s' % $season, 'Specials')[0 == $season]
|
|
#if $has_season_exceptions
|
|
#set $human_season += '<b class="season-mark-exception">*</b>'
|
|
#end if
|
|
## one off variable migration, on next version apply... (s/$getVar('display_seasons', [])/[]/),
|
|
<table class="sickbeardTable#echo '%s%s%s' % (('', ' season-min')[$season in $getVar('season_min', $getVar('display_seasons', []))], ('', ' latest-season')[$latest_season == $season], ('', ' open')[$season in $getVar('other_seasons', [])])#">
|
|
<thead>
|
|
<tr>
|
|
<th class="row-seasonheader" colspan="13">
|
|
#if None is $has_art#<span class="red-text pull-right">Restart SickGear to reveal new options here</span>
|
|
#elif not (1 == $lowest_season and 1 == $latest_season and $latest_season >= $highest_season)
|
|
<button id="showseason-$season" type="button" class="btn btn-default pull-right"><span class="onshow">Show $human_season.lower()<i class="sgicon-arrowdown"></i></span><span class="onhide">Hide $human_season.lower()<i class="sgicon-arrowup"></i></span></button>
|
|
<button type="button" class="btn btn-default pull-right allseasons"><span class="onshow">Show all</span><span class="onhide">Hide most</span><i class="icon-glyph"></i></button>
|
|
<span class="images pull-right hide"><i class="spinner"></i></span>
|
|
#end if
|
|
#set $videos = $ep_counts['videos'].get($season, '0')
|
|
#set $season_stats = $ep_counts['status'].get($season, {})
|
|
#set $snatched = $season_stats.get($Overview.SNATCHED, None)
|
|
#set $wanted = $season_stats.get($Overview.WANTED, None)
|
|
#set $qual = $season_stats.get($Overview.QUAL, None)
|
|
#set $good = $season_stats.get($Overview.GOOD, '0')
|
|
#set $archived = False if $season not in $ep_counts['archived'] else $ep_counts['archived'][$season]
|
|
<h3 id="season-$show_obj.tvid_prodid-$season"><span class="title">$human_season</span><a id="season-$season" name="season-$season"></a>
|
|
#if None is not $has_art
|
|
<span class="season-status"><span class="good status-badge"> D: <strong>$good</strong> </span>#if snatched#<span class="snatched status-badge"> S: <strong>$snatched</strong> </span>#end if##if $wanted#<span class="wanted status-badge"> W: <strong>$wanted</strong> </span>#end if##if $qual#<span class="qual status-badge"> LQ: <strong>$qual</strong> </span>#end if# of <span class="footerhighlight">$ep_counts['totals'][$season]</span>#if 0 < $archived# with <span class="footerhighlight">$archived</span> archived#end if##if int($videos)# #echo ('with', 'and')[0 < $archived]# <span class="footerhighlight">$videos</span> file$maybe_plural($videos)#end if#</span>
|
|
#end if
|
|
</h3>
|
|
</th>
|
|
</tr>
|
|
#set $attr_title_ep = ('', ' (Anime #)')[$show_obj.is_anime]
|
|
<tr id="season-$season-cols" class="seasoncols collapse tablesorter-headerRow">
|
|
<th class="col-checkbox tablesorter-no-sort"><input type="checkbox" class="seasonCheck" id="$season"></th>
|
|
<th class="col-metadata tablesorter-no-sort">Meta</th>
|
|
<th class="col-ep tablesorter-ep-num"><span title="Ep #$attr_title_ep"><span class="hdr-text">#</span></span></th>#if $scene or $scene_anime
|
|
<th class="col-ep tablesorter-ep-scene" style="padding-right:18px"><span class="hdr-text">Scene#if $scene_anime# absolute#end if#</span></th>#end if#
|
|
<th class="col-name"><span class="hdr-text">Name</span></th>
|
|
<th class="col-airdate tablesorter-airdate"><span class="hdr-text">Air Date</span></th>#if $sg_var('USE_SUBTITLES') and $show_obj.subtitles
|
|
<th class="col-subtitles tablesorter-no-sort">Subtitles</th>#end if
|
|
<th class="col-status"><span class="hdr-text">Status</span></th>
|
|
<th class="col-search tablesorter-no-sort">Search</th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody class="collapse">
|
|
#end if
|
|
#if None is $ep
|
|
</tbody>
|
|
#continue
|
|
#end if
|
|
|
|
#set global $episode = $ep
|
|
#include $os.path.join($sg_str('PROG_DIR'), 'gui/slick/interfaces/default/inc_displayShow.tmpl')
|
|
#end for
|
|
#end for
|
|
</tbody>
|
|
</table>
|
|
#end if
|
|
</div>
|
|
|
|
#if None is not $has_art
|
|
#include $os.path.join($sg_str('PROG_DIR'), 'gui/slick/interfaces/default/inc_livepanel.tmpl')
|
|
#end if
|
|
#include $os.path.join($sg_str('PROG_DIR'), 'gui/slick/interfaces/default/inc_bottom.tmpl')
|