mirror of
https://github.com/SickGear/SickGear.git
synced 2025-01-07 10:33:38 +00:00
c96dbf7ea6
Add "Enable IMDb info" option to config/General/Interface. Change to not display IMDb info on UI when "Enable IMDb info" is disabled. Change genre tags on displayShow page to link to IMDb instead of Trakt. Change to reduce the time taken to "Update shows" with show data. Change when IMDb info is updated... a) stop updating the IMDb info during the scheduled daily update for every show. b) update the IMDb info for a show after snatching an episode for it. Develop changes... Fix being able to actually turn IMDb off when it has been turned on. Remove IMDb option from General Settings. Change IMDb option to enable by default now the slow operation has been eliminated from process flows.
813 lines
32 KiB
Cheetah
813 lines
32 KiB
Cheetah
#import sickbeard
|
|
#import datetime
|
|
#from sickbeard.common import *
|
|
#from sickbeard import sbdatetime
|
|
#from sickbeard.helpers import anon_url
|
|
|
|
#set global $title = 'Episode View'
|
|
#set global $header = 'Episode View'
|
|
|
|
#set global $sbPath = '..'
|
|
|
|
#set global $topmenu = 'episodeView'
|
|
#import os.path
|
|
#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_top.tmpl')
|
|
|
|
#set $sort = $sickbeard.EPISODE_VIEW_SORT
|
|
#set $table_sort_header_codes = {'time': 0, 'show': 1, 'network': 4}
|
|
#if $sort not in $table_sort_header_codes:
|
|
#set $sort = 'time'
|
|
#end if
|
|
|
|
#if 'daybyday' != $layout:
|
|
<script type="text/javascript" src="$sbRoot/js/ajaxEpSearch.js?$sbPID"></script>
|
|
#end if
|
|
|
|
#if $varExists('header')
|
|
<h1 class="header">$header</h1>
|
|
#else
|
|
<h1 class="title">$title</h1>
|
|
#end if
|
|
|
|
#if 'daybyday' == $layout:
|
|
<script type="text/javascript" src="$sbRoot/js/plotTooltip.js?$sbPID"></script>
|
|
<script type="text/javascript" charset="utf-8">
|
|
<!--
|
|
\$(document).ready(function(){
|
|
|
|
var \$container = [];
|
|
\$.each(\$('[id^=day]'), function(){\$container.push(\$('#' + \$(this).attr('id')))});
|
|
|
|
jQuery.each(\$container, function(j) {
|
|
this.isotope({
|
|
itemSelector: '.daybyday-show',
|
|
sortBy : '$sort',
|
|
layoutMode: 'vertical',
|
|
transitionDuration: 0,
|
|
getSortData: {
|
|
network: function(itemElem) {
|
|
return \$(itemElem).attr('data-network') || '';
|
|
},
|
|
showname: function(itemElem) {
|
|
return \$(itemElem).attr('data-name') || '';
|
|
},
|
|
season: function(itemElem) {
|
|
var season = \$(itemElem).attr('data-season') || '0';
|
|
return season.length && parseInt(season, 10);
|
|
},
|
|
episode: function(itemElem) {
|
|
var episode = \$(itemElem).attr('data-episode') || '0';
|
|
return episode.length && parseInt(episode, 10);
|
|
},
|
|
time: function(itemElem) {
|
|
var time = \$(itemElem).attr('data-time') || '0';
|
|
return time.length && parseInt(time, 10);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
imagesLoaded('.daybyday-show', function() {
|
|
jQuery.each(\$container, function(j) {
|
|
this.isotope('layout');
|
|
});
|
|
});
|
|
|
|
var uiSortBy = (function(sortBy) {
|
|
var sortCriteria;
|
|
switch (sortBy) {
|
|
case 'network':
|
|
sortCriteria = ['network', 'time', 'showname', 'season', 'episode'];
|
|
break;
|
|
case 'show':
|
|
sortCriteria = ['showname', 'time', 'season', 'episode'];
|
|
break;
|
|
case 'time':
|
|
default:
|
|
sortCriteria = ['time', 'showname', 'season', 'episode'];
|
|
break;
|
|
}
|
|
jQuery.each(\$container, function(j) {
|
|
this.isotope({
|
|
sortBy: sortCriteria,
|
|
sortAscending: 'asc' == \$('#sort-dir').attr('data-sort-dir')
|
|
});
|
|
});
|
|
});
|
|
|
|
\$('#sort').on('change', function() {
|
|
uiSortBy(this.value);
|
|
\$.get(this.options[this.selectedIndex].getAttribute('data-sort'));
|
|
});
|
|
|
|
\$('#sort-dir').on('click', function() {
|
|
var sortdir = \$(this).attr('data-sort-dir'),
|
|
newdir = ('asc' == sortdir ? 'desc' : 'asc');
|
|
\$(this).attr('data-sort-dir', newdir);
|
|
\$(this).attr('title', 'Click to sort ' + sortdir + 'ending');
|
|
\$(this).removeClass(sortdir).addClass(newdir);
|
|
uiSortBy(\$('#sort').val());
|
|
});
|
|
|
|
\$('.carousel').on('slide.bs.carousel', function () {
|
|
imagesLoaded('.daybyday-show', function() {
|
|
jQuery.each(\$container, function(j) {
|
|
this.isotope('layout');
|
|
});
|
|
});
|
|
});
|
|
|
|
\$('div[title!=""], span[title!=""]').qtip({style: {classes: 'qtip-rounded qtip-shadow'},
|
|
position: {viewport: \$(window), my: 'left center', adjust: {y: -10, x: 0}},
|
|
show: {solo: true}
|
|
});
|
|
});
|
|
//-->
|
|
</script>
|
|
#end if
|
|
|
|
<style type="text/css">
|
|
#SubMenu {display:none}
|
|
#if 'daybyday' == $layout:
|
|
.ep-caret {
|
|
cursor: pointer;
|
|
vertical-align: middle;
|
|
margin-right: 2px;
|
|
}
|
|
.asc {
|
|
border-top: 0;
|
|
border-bottom: 8px solid;
|
|
}
|
|
.desc {
|
|
border-top: 8px solid;
|
|
border-bottom: 0;
|
|
}
|
|
#end if
|
|
</style>
|
|
|
|
<div class="h2footer pull-right">
|
|
<span>Layout
|
|
<select name="layout" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;">
|
|
<option value="$sbRoot/setEpisodeViewLayout/?layout=banner" #if 'banner' == $sickbeard.EPISODE_VIEW_LAYOUT then 'selected="selected"' else ''#>Banner</option>
|
|
<option value="$sbRoot/setEpisodeViewLayout/?layout=daybyday" #if 'daybyday' == $sickbeard.EPISODE_VIEW_LAYOUT then 'selected="selected"' else ''#>Day by Day</option>
|
|
<option value="$sbRoot/setEpisodeViewLayout/?layout=list" #if 'list' == $sickbeard.EPISODE_VIEW_LAYOUT then 'selected="selected"' else ''#>List</option>
|
|
<option value="$sbRoot/setEpisodeViewLayout/?layout=poster" #if 'poster' == $sickbeard.EPISODE_VIEW_LAYOUT then 'selected="selected"' else ''#>Poster</option>
|
|
</select>
|
|
</span>
|
|
|
|
<span>Sort
|
|
#if 'daybyday' == $layout:
|
|
<span id="sort-dir" data-sort-dir="asc" class="caret ep-caret asc" title="Click to sort descending"> </span>
|
|
#end if
|
|
By
|
|
#if 'daybyday' == $layout:
|
|
<select name="sort" id="sort" class="form-control form-control-inline input-sm">
|
|
<option value="network" data-sort="$sbRoot/setEpisodeViewSort/?sort=network&redir=0" #if 'network' == $sort then 'selected="selected"' else ''#>Network</option>
|
|
<option value="show" data-sort="$sbRoot/setEpisodeViewSort/?sort=show&redir=0" #if 'show' == $sort then 'selected="selected"' else ''#>Show</option>
|
|
<option value="time" data-sort="$sbRoot/setEpisodeViewSort/?sort=time&redir=0" #if 'time' == $sort then 'selected="selected"' else ''#>Time</option>
|
|
#else
|
|
<select name="sort" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;">
|
|
<option value="$sbRoot/setEpisodeViewSort/?sort=time" #if 'time' == $sort then 'selected="selected"' else ''#>Date/Time</option>
|
|
<option value="$sbRoot/setEpisodeViewSort/?sort=network" #if 'network' == $sort then 'selected="selected"' else ''#>Network</option>
|
|
<option value="$sbRoot/setEpisodeViewSort/?sort=show" #if 'show' == $sort then 'selected="selected"' else ''#>Show</option>
|
|
#end if
|
|
</select>
|
|
</span>
|
|
|
|
<span>View Paused
|
|
<select name="viewpaused" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value;">
|
|
<option value="$sbRoot/toggleEpisodeViewDisplayPaused"<%= (' selected="selected"', '')[True == sickbeard.EPISODE_VIEW_DISPLAY_PAUSED] %>>Hidden</option>
|
|
<option value="$sbRoot/toggleEpisodeViewDisplayPaused"<%= ('', ' selected="selected"')[True == sickbeard.EPISODE_VIEW_DISPLAY_PAUSED] %>>Shown</option>
|
|
</select>
|
|
</span>
|
|
</div>
|
|
|
|
<div class="key pull-right">
|
|
#if 'daybyday' != $layout:
|
|
<b>Key:</b>
|
|
<span class="listing-key listing-overdue">Missed</span>
|
|
<span class="listing-key listing-current">Current</span>
|
|
<span class="listing-key listing-default">Future</span>
|
|
<span class="listing-key listing-toofar">Distant</span>
|
|
#end if
|
|
<a class="btn btn-inline forceBacklog" href="webcal://$sbHost:$sbHttpPort/calendar">
|
|
<i class="icon-calendar icon-white"></i>Subscribe</a>
|
|
</div>
|
|
|
|
<br>
|
|
|
|
|
|
|
|
#if 'list' == $layout:
|
|
<!-- start list view //-->
|
|
|
|
<script type="text/javascript" src="$sbRoot/js/plotTooltip.js?$sbPID"></script>
|
|
<script type="text/javascript" charset="utf-8">
|
|
<!--
|
|
\$.tablesorter.addParser({
|
|
id: 'loadingNames',
|
|
is: function(s) {
|
|
return false
|
|
},
|
|
format: function(s) {
|
|
if(0 == s.indexOf('Loading...'))
|
|
return s.replace('Loading...', '000')
|
|
return (s || '')
|
|
},
|
|
type: 'text'
|
|
});
|
|
\$.tablesorter.addParser({
|
|
id: 'quality',
|
|
is: function(s) {
|
|
return false
|
|
},
|
|
format: function(s) {
|
|
return s.replace('hd1080p', 5).replace('hd720p', 4).replace('hd', 3).replace('sd', 2).replace('any', 1).replace('best', 0).replace('custom', 7)
|
|
},
|
|
type: 'numeric'
|
|
});
|
|
\$.tablesorter.addParser({
|
|
id: 'cDate',
|
|
is: function(s) {
|
|
return false
|
|
},
|
|
format: function(s) {
|
|
return s
|
|
},
|
|
type: 'numeric'
|
|
});
|
|
|
|
\$(document).ready(function(){
|
|
|
|
sortList = [[$table_sort_header_codes[$sort], 0]];
|
|
|
|
\$('#showListTable:has(tbody tr)').tablesorter({
|
|
widgets: ['stickyHeaders'],
|
|
sortList: sortList,
|
|
textExtraction: {
|
|
0: function(node) {return \$(node).find('span').text().toLowerCase() || ''},
|
|
1: function(node) {return \$(node).find('a').attr('data-name') || ''},
|
|
4: function(node) {return \$(node).find('span').attr('data-network') || ''},
|
|
5: function(node) {return \$(node).find('span').text().toLowerCase() || ''}
|
|
},
|
|
headers: {
|
|
0: {sorter: 'cDate'},
|
|
1: {sorter: 'loadingNames'},
|
|
2: {sorter: false},
|
|
3: {sorter: false},
|
|
4: {sorter: 'loadingNames'},
|
|
5: {sorter: 'quality'},
|
|
6: {sorter: false},
|
|
7: {sorter: false},
|
|
8: {sorter: false}
|
|
}
|
|
});
|
|
|
|
\$('#sbRoot').ajaxEpSearch();
|
|
|
|
#set $fuzzydate = 'airdate'
|
|
#if $sickbeard.FUZZY_DATING:
|
|
fuzzyMoment({
|
|
containerClass : '.${fuzzydate}',
|
|
dateHasTime : true,
|
|
dateFormat : '${sickbeard.DATE_PRESET}',
|
|
timeFormat : '${sickbeard.TIME_PRESET}',
|
|
trimZero : #if $sickbeard.TRIM_ZERO then 'true' else 'false'#
|
|
});
|
|
#end if
|
|
|
|
});
|
|
//-->
|
|
</script>
|
|
|
|
#set $show_div = 'listing-default'
|
|
|
|
<input type="hidden" id="sbRoot" value="$sbRoot" />
|
|
|
|
<table id="showListTable" class="sickbeardTable tablesorter seasonstyle" cellspacing="1" border="0" cellpadding="0">
|
|
|
|
<thead>
|
|
<tr>
|
|
<th>Airdate</th>
|
|
<th>Show</th>
|
|
<th class="nowrap">Next Ep</th>
|
|
<th>Next Ep Name</th>
|
|
<th>Network</th>
|
|
<th>Quality</th>
|
|
<th>Indexers</th>
|
|
<th>Search</th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody style="text-shadow:none;">
|
|
|
|
#for $cur_result in $sql_results:
|
|
#set $cur_indexer = int($cur_result['indexer'])
|
|
#set $runtime = $cur_result['runtime']
|
|
|
|
#if int($cur_result['paused']) and not $sickbeard.EPISODE_VIEW_DISPLAY_PAUSED:
|
|
#continue
|
|
#end if
|
|
|
|
#set $cur_ep_airdate = $cur_result['localtime'].date()
|
|
|
|
#if $runtime:
|
|
#set $cur_ep_enddate = $cur_result['localtime'] + datetime.timedelta(minutes = $runtime)
|
|
#if $cur_ep_enddate < $today:
|
|
#set $show_div = 'listing-overdue'
|
|
#elif $cur_ep_airdate >= $next_week.date():
|
|
#set $show_div = 'listing-toofar'
|
|
#elif $cur_ep_airdate >= $today.date() and $cur_ep_airdate < $next_week.date():
|
|
#if $cur_ep_airdate == $today.date():
|
|
#set $show_div = 'listing-current'
|
|
#else:
|
|
#set $show_div = 'listing-default'
|
|
#end if
|
|
#end if
|
|
#end if
|
|
|
|
#set $show_id = '%s_%sx%s' % (str($cur_result['showid']), str($cur_result['season']), str($cur_result['episode']))
|
|
<!-- start $cur_result['show_name'] //-->
|
|
<tr id="show-${show_id}" class="$show_div" data-rawname="$cur_result['show_name']">
|
|
## forced to use a div to wrap airdate, the column sort went crazy with a span
|
|
<td align="center" class="nowrap">
|
|
<div class="${fuzzydate}">$sbdatetime.sbdatetime.sbfdatetime($cur_result['localtime']).decode($sickbeard.SYS_ENCODING)</div><span class="sort_data">$time.mktime($cur_result['localtime'].timetuple())</span>
|
|
</td>
|
|
|
|
<td class="tvShow"><a href="$sbRoot/home/displayShow?show=${cur_result['showid']}" data-name="$cur_result['data_show_name']">$cur_result['show_name']</a>
|
|
#if int($cur_result['paused']):
|
|
<span class="pause">[paused]</span>
|
|
#end if
|
|
</td>
|
|
|
|
<td class="nowrap" align="center">
|
|
<%= 'S%02iE%02i' % (int(cur_result['season']), int(cur_result['episode'])) %>
|
|
</td>
|
|
|
|
<td>
|
|
#if $cur_result['description']:
|
|
<img alt="" src="$sbRoot/images/info32.png" height="16" width="16" class="plotInfo" id="plot-${show_id}" />
|
|
#else:
|
|
<img alt="" src="$sbRoot/images/info32.png" width="16" height="16" class="plotInfoNone" />
|
|
#end if
|
|
$cur_result['name']
|
|
</td>
|
|
|
|
<td align="center">
|
|
<span data-network="$cur_result['data_network']">$cur_result['network']</span>
|
|
</td>
|
|
|
|
<td align="center">
|
|
#if int($cur_result['quality']) in $qualityPresets:
|
|
<span class="quality $qualityPresetStrings[int($cur_result['quality'])]">$qualityPresetStrings[int($cur_result['quality'])]</span>
|
|
#else:
|
|
<span class="quality Custom">Custom</span>
|
|
#end if
|
|
</td>
|
|
|
|
<td align="center" style="vertical-align: middle;">
|
|
#if sickbeard.USE_IMDB_INFO and $cur_result['imdb_id']:
|
|
<a href="<%= anon_url('http://www.imdb.com/title/', cur_result['imdb_id']) %>" rel="noreferrer" onclick="window.open(this.href, '_blank'); return false" title="http://www.imdb.com/title/${cur_result['imdb_id']}"><img alt="[imdb]" height="16" width="16" src="$sbRoot/images/imdb.png" />
|
|
#end if
|
|
<a href="<%= anon_url(sickbeard.indexerApi(cur_indexer).config['show_url'], cur_result['showid']) %>" rel="noreferrer" onclick="window.open(this.href, '_blank'); return false" title="$sickbeard.indexerApi($cur_indexer).config['show_url']${cur_result['showid']}"><img alt="$sickbeard.indexerApi($cur_indexer).name" height="16" width="16" src="$sbRoot/images/$sickbeard.indexerApi($cur_indexer).config['icon']" /></a>
|
|
</td>
|
|
|
|
<td align="center">
|
|
<a href="$sbRoot/home/searchEpisode?show=${cur_result['showid']}&season=$cur_result['season']&episode=$cur_result['episode']" title="Manual Search" id="forceUpdate-${cur_result['showid']}" class="forceUpdate epSearch"><img alt="[search]" height="16" width="16" src="$sbRoot/images/search16.png" id="forceUpdateImage-${cur_result['showid']}" /></a>
|
|
</td>
|
|
</tr>
|
|
<!-- end $cur_result['show_name'] //-->
|
|
|
|
#end for
|
|
|
|
</tbody>
|
|
|
|
<tfoot>
|
|
<tr>
|
|
<th rowspan="1" colspan="10" align="center"> </th>
|
|
</tr>
|
|
</tfoot>
|
|
|
|
</table>
|
|
<!-- end list view //-->
|
|
|
|
|
|
|
|
#else if $layout in ['banner', 'poster']:
|
|
<!-- start non list view //-->
|
|
|
|
<script type="text/javascript" charset="utf-8">
|
|
<!--
|
|
\$(document).ready(function(){
|
|
\$('#sbRoot').ajaxEpSearch({'size': 16, 'loadingImage': 'loading16' + themeSpinner + '.gif'});
|
|
\$('.ep_summary').hide();
|
|
\$('.ep_summaryTrigger').click(function() {
|
|
\$(this).next('.ep_summary').slideToggle('normal', function() {
|
|
\$(this).prev('.ep_summaryTrigger').attr('src', function(i, src) {
|
|
return \$(this).next('.ep_summary').is(':visible') ? src.replace('plus','minus') : src.replace('minus','plus')
|
|
});
|
|
});
|
|
});
|
|
|
|
#set $fuzzydate = 'airdate'
|
|
#if $sickbeard.FUZZY_DATING:
|
|
fuzzyMoment({
|
|
dtInline : true,
|
|
dtGlue : ' at ',
|
|
containerClass : '.${fuzzydate}',
|
|
dateHasTime : true,
|
|
dateFormat : '${sickbeard.DATE_PRESET}',
|
|
timeFormat : '${sickbeard.TIME_PRESET}',
|
|
trimZero : #if $sickbeard.TRIM_ZERO then 'true' else 'false'#
|
|
});
|
|
#end if
|
|
});
|
|
//-->
|
|
</script>
|
|
|
|
#set $cur_segment = None
|
|
#set $too_late_header = False
|
|
#set $missed_header = False
|
|
#set $today_header = False
|
|
#set $show_div = 'ep_listing listing-default'
|
|
|
|
#if 'show' == $sort:
|
|
<br /><br />
|
|
#end if
|
|
|
|
#for $cur_result in $sql_results:
|
|
#set $cur_indexer = int($cur_result['indexer'])
|
|
|
|
#if int($cur_result['paused']) and not $sickbeard.EPISODE_VIEW_DISPLAY_PAUSED:
|
|
#continue
|
|
#end if
|
|
|
|
#set $runtime = $cur_result['runtime']
|
|
|
|
#if 'network' == $sort:
|
|
|
|
#set $show_network = $cur_result['network'] if $cur_result['network'] else 'no network'
|
|
#if $cur_segment != $show_network:
|
|
<div class="episode-view-header">
|
|
<br><h2 class="network">$show_network</h2>
|
|
#set $cur_segment = $cur_result['network']
|
|
#end if
|
|
#set $cur_ep_airdate = $cur_result['localtime'].date()
|
|
|
|
#if $runtime:
|
|
#set $cur_ep_enddate = $cur_result['localtime'] + datetime.timedelta(minutes = $runtime)
|
|
#if $cur_ep_enddate < $today:
|
|
#set $show_div = 'ep_listing listing-overdue'
|
|
#elif $cur_ep_airdate >= $next_week.date():
|
|
#set $show_div = 'ep_listing listing-toofar'
|
|
#elif $cur_ep_enddate >= $today and $cur_ep_airdate < $next_week.date():
|
|
#if $cur_ep_airdate == $today.date():
|
|
#set $show_div = 'ep_listing listing-current'
|
|
#else:
|
|
#set $show_div = 'ep_listing listing-default'
|
|
#end if
|
|
#end if
|
|
#end if
|
|
|
|
#elif 'time' == $sort:
|
|
|
|
#set $cur_ep_airdate = $cur_result['localtime'].date()
|
|
|
|
#if $cur_segment != $cur_ep_airdate:
|
|
#if $runtime:
|
|
#set $cur_ep_enddate = $cur_result['localtime'] + datetime.timedelta(minutes = $runtime)
|
|
#if $cur_ep_enddate < $today and $cur_ep_airdate != $today.date() and not $missed_header:
|
|
<br /><h2 class="day">Missed</h2>
|
|
#set $missed_header = True
|
|
#elif $cur_ep_airdate >= $next_week.date() and not $too_late_header:
|
|
<br /><h2 class="day">Later</h2>
|
|
#set $too_late_header = True
|
|
#elif $cur_ep_enddate >= $today and $cur_ep_airdate < $next_week.date():
|
|
#if $cur_ep_airdate == $today.date():
|
|
<br /><h2 class="day">$sbdatetime.sbdatetime.sbfdate($cur_ep_airdate, '%A').decode($sickbeard.SYS_ENCODING).capitalize() <span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
|
|
#set $today_header = True
|
|
#else:
|
|
<br /><h2 class="day">$sbdatetime.sbdatetime.sbfdate($cur_ep_airdate, '%A').decode($sickbeard.SYS_ENCODING).capitalize()</h2>
|
|
#end if
|
|
#end if
|
|
#end if
|
|
#set $cur_segment = $cur_ep_airdate
|
|
#end if
|
|
|
|
#if $cur_ep_airdate == $today.date() and not $today_header:
|
|
<div class="episode-view-header">
|
|
<br /><h2 class="day">$sbdatetime.sbdatetime.sbfdate($cur_ep_airdate, '%A').decode($sickbeard.SYS_ENCODING).capitalize() <span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
|
|
#set $today_header = True
|
|
#end if
|
|
|
|
#if $runtime:
|
|
#set $cur_ep_enddate = $cur_result['localtime'] + datetime.timedelta(minutes = $runtime)
|
|
#if $cur_ep_enddate < $today:
|
|
#set $show_div = 'ep_listing listing-overdue'
|
|
#elif $cur_ep_airdate >= $next_week.date():
|
|
#set $show_div = 'ep_listing listing-toofar'
|
|
#elif $cur_ep_enddate >= $today and $cur_ep_airdate < $next_week.date():
|
|
#if $cur_ep_airdate == $today.date():
|
|
#set $show_div = 'ep_listing listing-current'
|
|
#else:
|
|
#set $show_div = 'ep_listing listing-default'
|
|
#end if
|
|
#end if
|
|
#end if
|
|
|
|
#elif 'show' == $sort:
|
|
#set $cur_ep_airdate = $cur_result['localtime'].date()
|
|
|
|
#if $runtime:
|
|
#set $cur_ep_enddate = $cur_result['localtime'] + datetime.timedelta(minutes = $runtime)
|
|
#if $cur_ep_enddate < $today:
|
|
#set $show_div = 'ep_listing listing-overdue listingradius'
|
|
#elif $cur_ep_airdate >= $next_week.date():
|
|
#set $show_div = 'ep_listing listing-toofar listingradius'
|
|
#elif $cur_ep_enddate >= $today and $cur_ep_airdate < $next_week.date():
|
|
#if $cur_ep_airdate == $today.date():
|
|
#set $show_div = 'ep_listing listing-current listingradius'
|
|
#else:
|
|
#set $show_div = 'ep_listing listing-default listingradius'
|
|
#end if
|
|
#end if
|
|
#end if
|
|
#end if
|
|
|
|
<!-- start $cur_result['show_name'] //-->
|
|
<div class="$show_div" id="listing-${cur_result['showid']}">
|
|
<div class="tvshowDiv">
|
|
<table width="100%" border="0" cellpadding="0" cellspacing="0">
|
|
<tr>
|
|
<th #if 'banner' == $layout then 'class="nobg"' else 'rowspan="2"'# valign="top">
|
|
<a href="$sbRoot/home/displayShow?show=${cur_result['showid']}"><img alt="" class="#if 'banner' == $layout then 'bannerThumb' else 'posterThumb'#" src="$sbRoot/showPoster/?show=${cur_result['showid']}&which=#if 'poster' == $layout then 'poster_thumb' else $layout#" /></a>
|
|
</th>
|
|
|
|
#if 'banner' == $layout:
|
|
</tr>
|
|
<tr>
|
|
#end if
|
|
|
|
<td class="next_episode">
|
|
<div class="clearfix">
|
|
<span class="tvshowTitle">
|
|
<a href="$sbRoot/home/displayShow?show=${cur_result['showid']}" data-name="$cur_result['data_show_name']">$cur_result['show_name']
|
|
#if int($cur_result['paused']):
|
|
<span class="pause">[paused]</span>
|
|
#end if
|
|
</a></span>
|
|
|
|
<span class="tvshowTitleIcons">
|
|
#if sickbeard.USE_IMDB_INFO and $cur_result['imdb_id']:
|
|
<a href="<%= anon_url('http://www.imdb.com/title/', cur_result['imdb_id']) %>" rel="noreferrer" onclick="window.open(this.href, '_blank'); return false" title="http://www.imdb.com/title/${cur_result['imdb_id']}"><img alt="[imdb]" height="16" width="16" src="$sbRoot/images/imdb.png" />
|
|
#end if
|
|
<a href="<%= anon_url(sickbeard.indexerApi(cur_indexer).config['show_url'], cur_result['showid']) %>" rel="noreferrer" onclick="window.open(this.href, '_blank'); return false" title="$sickbeard.indexerApi($cur_indexer).config['show_url']${cur_result['showid']}"><img alt="$sickbeard.indexerApi($cur_indexer).name" height="16" width="16" src="$sbRoot/images/$sickbeard.indexerApi($cur_indexer).config['icon']" /></a>
|
|
<span><a href="$sbRoot/home/searchEpisode?show=${cur_result['showid']}&season=$cur_result['season']&episode=$cur_result['episode']" title="Manual Search" id="forceUpdate-${cur_result['showid']}" class="epSearch forceUpdate"><img alt="[search]" height="16" width="16" src="$sbRoot/images/search16.png" id="forceUpdateImage-${cur_result['showid']}" /></a></span>
|
|
</span>
|
|
</div>
|
|
|
|
<span class="title">Next Episode:</span> <span><%= 'S%02iE%02i' % (int(cur_result['season']), int(cur_result['episode'])) %> - $cur_result['name']</span>
|
|
|
|
<div class="clearfix">
|
|
|
|
<span class="title">Airdate: </span><span class="${fuzzydate}">$sbdatetime.sbdatetime.sbfdatetime($cur_result['localtime']).decode($sickbeard.SYS_ENCODING)</span><%= ('', '<span> on %s</span>' % str(cur_result['network']))[None is not cur_result['network']] %>
|
|
</div>
|
|
|
|
<div class="clearfix">
|
|
<span class="title">Quality:</span>
|
|
#if int($cur_result['quality']) in $qualityPresets:
|
|
<span class="quality $qualityPresetStrings[int($cur_result['quality'])]">$qualityPresetStrings[int($cur_result['quality'])]</span>
|
|
#else:
|
|
<span class="quality Custom">Custom</span>
|
|
#end if
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="vertical-align: top;">
|
|
<div>
|
|
#if $cur_result['description']:
|
|
<span class="title" style="vertical-align:middle;">Plot:</span>
|
|
<img class="ep_summaryTrigger" src="$sbRoot/images/plus.png" height="16" width="16" alt="" title="Toggle Summary" /><div class="ep_summary">$cur_result['description']</div>
|
|
#else:
|
|
<span class="title ep_summaryTriggerNone" style="vertical-align:middle;">Plot:</span>
|
|
<img class="ep_summaryTriggerNone" src="$sbRoot/images/plus.png" height="16" width="16" alt="" />
|
|
#end if
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<!-- end $cur_result['show_name'] //-->
|
|
#end for
|
|
<!-- end non list view //-->
|
|
#end if
|
|
|
|
#if 'daybyday' == $layout:
|
|
|
|
#set $shows_overdue = []
|
|
#set $shows_soon = []
|
|
#set $shows_future = []
|
|
|
|
#set $state_overdue = 'listing-overdue'
|
|
#set $state_current = 'listing-current'
|
|
#set $state_soon = 'listing-soon'
|
|
#set $state_future = 'listing-default'
|
|
|
|
#for $cur_result in $sql_results:
|
|
#if int($cur_result['paused']) and not $sickbeard.EPISODE_VIEW_DISPLAY_PAUSED:
|
|
#continue
|
|
#end if
|
|
#if $cur_result['runtime']:
|
|
#set $air_date = $cur_result['localtime'].date()
|
|
#set $end_datetime = $cur_result['localtime'] + datetime.timedelta(minutes = $cur_result['runtime'])
|
|
#if $air_date >= $next_week.date():
|
|
#set $cur_result['state'] = ''
|
|
$shows_future.append($cur_result)
|
|
#elif $cur_result['localtime'] > $today
|
|
#set $cur_result['state'] = ''
|
|
$shows_soon.append($cur_result)
|
|
#elif $end_datetime > $today
|
|
#set $cur_result['state'] = $state_current
|
|
#set $cur_result['state-title'] = 'Currently On Air'
|
|
$shows_soon.append($cur_result)
|
|
#elif $air_date == $today.date():
|
|
#set $cur_result['state'] = $state_overdue
|
|
#set $cur_result['state-title'] = 'Overdue'
|
|
$shows_soon.append($cur_result)
|
|
#else
|
|
#set $cur_result['state'] = $state_overdue
|
|
#set $cur_result['state-title'] = 'Overdue'
|
|
$shows_overdue.append($cur_result)
|
|
#end if
|
|
#else
|
|
#set $cur_result['state'] = $state_soon
|
|
$shows_soon.append($cur_result)
|
|
#end if
|
|
#end for
|
|
|
|
##set $state_init = [int(bool($shows_overdue)), ($state_soon, $state_overdue)[0 < len($shows_overdue)]] ## default overdue
|
|
#set $state_init = [int(bool($shows_overdue)), $state_soon] ## default soon
|
|
|
|
#set $dates_future = sorted({$i['localtime'].date():$i for $i in $shows_future})
|
|
#set $rounded_week = len($dates_future)/7*7 + int(bool(len($dates_future)%7))*7
|
|
#set $dates_future += [$dates_future[-1] + datetime.timedelta(days = 1 + $i) for $i in range($rounded_week - len($dates_future))]
|
|
#set $num_weeks = $rounded_week/7
|
|
|
|
<input type="hidden" id="sbRoot" value="$sbRoot" />
|
|
|
|
<div class="daybydayCarouselContainer">
|
|
<div id="Carousel" class="carousel slide">
|
|
|
|
<div class="controlsBlock">
|
|
<a class="left carousel-control" href="#Carousel" data-slide="prev"><i class="glyphicon glyphicon-chevron-left"></i></a>
|
|
<a class="right carousel-control" href="#Carousel" data-slide="next"><i class="glyphicon glyphicon-chevron-right"></i></a>
|
|
<div class="carousel-indicators">
|
|
|
|
#set $slide_id = 0
|
|
#if len($shows_overdue)
|
|
<li data-target="#Carousel" data-slide-to="$slide_id" class="$state_overdue#if $state_init[1] == $state_overdue then ' active' else ''#"></li>
|
|
#set $slide_id = 1
|
|
#end if
|
|
<li data-target="#Carousel" data-slide-to="$slide_id" class="$state_soon#if $state_init[1] == $state_soon then ' active' else ''#"></li>
|
|
#set $slide_id += 1
|
|
|
|
#for $i in range($slide_id, $slide_id + $num_weeks)
|
|
<li data-target="#Carousel" data-slide-to="${i}" class="$state_future#if $state_init[1] == $state_future and $state_init[0] == $i then ' active' else ''#"></li>
|
|
#end for
|
|
</div>
|
|
</div>
|
|
|
|
<div class="carousel-inner">
|
|
|
|
#for $shows, $state in [[$shows_overdue, $state_overdue], [$shows_soon, $state_soon], [$shows_future, $state_future]]
|
|
#if 0 == len($shows) and ($state_overdue == $state or $state_future == $state)
|
|
#continue
|
|
#end if
|
|
#set $week_num = 0
|
|
#set $num_weeks = 1
|
|
#while ($num_weeks)
|
|
#if $state_future == $state
|
|
#set $dates = $dates_future[$week_num*7:$week_num*7+7]
|
|
#if 0 == $week_num
|
|
#set $num_weeks = $rounded_week/7
|
|
#end if
|
|
#set $week_num += 1
|
|
#else
|
|
#set $dates = [($today + datetime.timedelta(days = ($i, -7+$i)[$state_overdue == $state])).date() for $i in range(7)]
|
|
#end if
|
|
#set $num_weeks -= 1
|
|
|
|
<div class="item#if $state_init[1] == $state then ' active' else ''#"> <!-- start $state -->
|
|
<div class="daybydayWrapper">
|
|
|
|
#set $tbl_day = 0
|
|
#for $day in $dates
|
|
|
|
#set $tbl_day += 1
|
|
|
|
#set $col_class = ''
|
|
#if 1 == $tbl_day and $state_soon == $state
|
|
#set $col_class = 'today'
|
|
#end if
|
|
#set $col_class = '%s %s' % ($col_class, ('even', 'odd')[1 == tbl_day % 2])
|
|
|
|
<div class="day-of-week $col_class">
|
|
<div class="day-number">
|
|
<div class="number">$sbdatetime.sbdatetime.sbfdate($day, ' %d').decode($sickbeard.SYS_ENCODING).replace(' 0', ' ')</div>
|
|
<div class="day">
|
|
<span class="visible-lg">$sbdatetime.sbdatetime.sbfdate($day, '%A').decode($sickbeard.SYS_ENCODING).capitalize()</span>
|
|
<span class="hidden-lg">$sbdatetime.sbdatetime.sbfdate($day, '%a').decode($sickbeard.SYS_ENCODING).capitalize()</span>
|
|
</div>
|
|
<div class="month">
|
|
<span class="visible-lg">$sbdatetime.sbdatetime.sbfdate($day, '%B').decode($sickbeard.SYS_ENCODING).capitalize()</span>
|
|
<span class="hidden-lg">$sbdatetime.sbdatetime.sbfdate($day, '%b').decode($sickbeard.SYS_ENCODING).capitalize()</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="$sbdatetime.sbdatetime.sbfdate($day, 'day%j')">
|
|
|
|
#set $day_has_show = False
|
|
#for $cur_result in $shows:
|
|
#if $day == $cur_result['localtime'].date():
|
|
#set $day_has_show = True
|
|
#set $airtime = $sbdatetime.sbdatetime.sbftime($cur_result['localtime'], markup=True).decode($sickbeard.SYS_ENCODING)
|
|
#set $img_id = ''
|
|
#set $plot_class = ''
|
|
#set $title_text = ''
|
|
#set $show_id = '%s_%sx%s' % (str($cur_result['showid']), str($cur_result['season']), str($cur_result['episode']))
|
|
#set $img_id = ' id="plot-%s"' % $show_id
|
|
#set $plot_class = ' plot-daybyday'
|
|
|
|
<div id="show-${show_id}" class="daybyday-show" data-name="$cur_result['data_show_name']" data-season="$cur_result['season']" data-episode="$cur_result['episode']" data-network="$cur_result['data_network']" data-time="$time.mktime($cur_result['localtime'].timetuple())" data-rawname="$cur_result['show_name']">
|
|
<div class="poster">
|
|
<a${title_text} href="$sbRoot/home/displayShow?show=${cur_result['showid']}">
|
|
<img${img_id} class="img-responsive${plot_class}" alt="" src="$sbRoot/showPoster/?show=${cur_result['showid']}&which=poster_thumb" /></a>
|
|
</div>
|
|
<div class="state#if len($cur_result['state']) then ' %s" title="%s"' % ($cur_result['state'], $cur_result['state-title']) else '"' #></div>
|
|
<div class="text">
|
|
<div class="airtime">
|
|
<span class="time">${airtime}</span> <span class="network pull-right grey-text">$cur_result['network']</span>
|
|
</div>
|
|
<div class="episode" title="$cur_result['name']">
|
|
<span class="season"><%= '%i' % int(cur_result['season']) %></span>x<span class="number"><%= '%02i' % int(cur_result['episode']) %></span>
|
|
<span class="name">$cur_result['name']</span>
|
|
</div>
|
|
</div>
|
|
#if int($cur_result['paused']):
|
|
<span class="over-layer0">[paused]</span>
|
|
<span class="over-layer1">[paused]</span>
|
|
#elif $state_current == $cur_result['state']
|
|
#set $endtime = $sbdatetime.sbdatetime.sbftime($cur_result['localtime'] + datetime.timedelta(minutes = $cur_result['runtime']), markup=True).decode($sickbeard.SYS_ENCODING)
|
|
<span class="over-layer0 on-air0">On Air until<br />$endtime</span>
|
|
<span class="over-layer1 on-air1">On Air until<br />$endtime</span>
|
|
#end if
|
|
</div><!-- end show-$cur_result['showid'] //-->
|
|
|
|
#end if
|
|
#end for
|
|
#if not $day_has_show:
|
|
<div class="daybyday-show">
|
|
#set $theday = ('this ', 'to')[1 == $tbl_day and $state_soon == $state]
|
|
<span class="episode-blank">No shows ${theday}day</span>
|
|
</div>
|
|
#end if
|
|
</div>
|
|
</div>
|
|
#end for
|
|
</div> <!-- end daybydayWrapper //-->
|
|
</div> <!-- end $state //-->
|
|
#end while
|
|
#end for
|
|
|
|
</div> <!-- end carouselinner //-->
|
|
</div> <!-- end Carousel //-->
|
|
</div> <!-- end daybydayCarouselContainer //-->
|
|
|
|
<!-- end calender view //-->
|
|
#end if
|
|
|
|
<div class="clearfix"></div>
|
|
|
|
<script type="text/javascript" charset="utf-8">
|
|
<!--
|
|
window.setInterval('location.reload(true)', 30*60000); // Refresh every xx minutes
|
|
|
|
\$('#Carousel').carousel({
|
|
interval: 0
|
|
});
|
|
|
|
\$(document).bind('keyup', function(e) {
|
|
if(e.which == 39){
|
|
\$('.carousel').carousel('next');
|
|
}
|
|
else if(e.which == 37){
|
|
\$('.carousel').carousel('prev');
|
|
}
|
|
});
|
|
|
|
//-->
|
|
</script>
|
|
|
|
#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_bottom.tmpl')
|