2014-03-10 05:18:05 +00:00
#import sickbeard
#import datetime
#import re
2015-05-07 00:36:40 +00:00
#from sickbeard . common import *
#from sickbeard import sbdatetime
2014-03-10 05:18:05 +00:00
#from sickbeard import history
#from sickbeard import providers
#from sickbeard . providers import generic
2015-05-07 00:36:40 +00:00
##
2015-03-31 00:07:24 +00:00
#set global $ title = ' History '
#set global $ header = ' History '
#set global $ sbPath = ' .. '
#set global $ topmenu = ' history '
2014-03-10 05:18:05 +00:00
#set $ layout = $ sickbeard . HISTORY_LAYOUT
2015-05-07 00:36:40 +00:00
##
#import os . path
2015-03-31 00:07:24 +00:00
#include $ os . path . join ( $ sickbeard . PROG_DIR , ' gui/slick/interfaces/default/inc_top.tmpl ' )
2014-03-10 05:18:05 +00:00
<script type="text/javascript">
<!--
\$.tablesorter.addParser({
2015-03-31 00:07:24 +00:00
id: 'cDate',
is: function(s) {
return false;
},
format: function(s) {
return s;
},
type: 'numeric'
2014-03-10 05:18:05 +00:00
});
2015-03-31 00:07:24 +00:00
\$(document).ready(function()
{
\$(' #historyTable : has ( tbody tr ) ' ).tablesorter( {
widgets: ['zebra', 'filter'],
sortList: [[0, 1]],
textExtraction: {
0: function(node) { return \$(node).find('span').text().toLowerCase(); },
#if ( ' detailed ' == $ layout )
4: function(node) { return \$(node).find('span').text().toLowerCase(); }
#else
1: function(node) { return \$(node).find('span').text().toLowerCase(); },
2: function(node) { return \$(node).attr('provider').toLowerCase(); },
5: function(node) { return \$(node).attr('quality').toLowerCase(); }
#end if
},
headers: {
0: { sorter: 'cDate' },
#if ( ' detailed ' == $ layout )
4: { sorter: 'quality' }
#else
4: { sorter: false },
5: { sorter: 'quality' }
#end if
}
});
\$(' #limit ' ).change(function() {
url = ' $ sbRoot /history/?limit=' + \$(this).val()
window.location.href = url
});
#set $ fuzzydate = ' airdate '
#if $ sickbeard . FUZZY_DATING
fuzzyMoment({
2015-05-07 00:36:40 +00:00
containerClass: '. ${ fuzzydate } ',
dateHasTime: !0,
dateFormat: ' ${ sickbeard . DATE_PRESET } ',
timeFormat: ' ${ sickbeard . TIME_PRESET_W_SECONDS } ',
trimZero: #echo ( ' !1 ' , ' !0 ' ) [ $ sickbeard . TRIM_ZERO ] # ,
dtGlue: ', '
2015-03-31 00:07:24 +00:00
});
#end if
2014-03-10 05:18:05 +00:00
});
//-->
</script>
2015-05-07 00:36:40 +00:00
2015-03-31 00:07:24 +00:00
#if $ varExists ( ' header ' )
<h1 class="header"> $ header </h1>
#else
<h1 class="title"> $ title </h1>
2014-03-10 05:18:05 +00:00
#end if
2015-03-31 00:07:24 +00:00
#set $ html_selected = ' selected= " selected " '
2015-05-07 00:36:40 +00:00
##
2015-03-31 00:07:24 +00:00
<div class="h2footer pull-right">Limit:
<select name="limit" id="limit" class="form-control form-control-inline input-sm">
<option value="100" #echo ( ' ' , $ html_selected ) [ ' 100 ' == $ limit ] # >100</option>
<option value="250" #echo ( ' ' , $ html_selected ) [ ' 250 ' == $ limit ] # >250</option>
<option value="500" #echo ( ' ' , $ html_selected ) [ ' 500 ' == $ limit ] # >500</option>
<option value="0" #echo ( ' ' , $ html_selected ) [ ' 0 ' == $ limit ] # >All</option>
2014-10-21 19:09:01 +00:00
</select>
2014-03-10 05:18:05 +00:00
2015-03-31 00:07:24 +00:00
<span style="margin-left:5px">Layout:
<select name="HistoryLayout" class="form-control form-control-inline input-sm" onchange="location = this.options[this.selectedIndex].value">
<option value=" $ sbRoot /setHistoryLayout/?layout=compact" #echo ( ' ' , $ html_selected ) [ ' compact ' == $ sickbeard . HISTORY_LAYOUT ] # >Compact</option>
<option value=" $ sbRoot /setHistoryLayout/?layout=detailed" #echo ( ' ' , $ html_selected ) [ ' detailed ' == $ sickbeard . HISTORY_LAYOUT ] # >Detailed</option>
</select>
</span>
</div>
<br>
<table id="historyTable" class="sickbeardTable tablesorter $ layout " cellspacing="1" border="0" cellpadding="0">
#if ' detailed ' == $ layout
2014-09-30 22:20:37 +00:00
<thead>
<tr>
<th class="nowrap">Time</th>
2015-03-31 00:07:24 +00:00
<th width="35%">Episode</th>
2014-09-30 22:20:37 +00:00
<th>Action</th>
<th>Provider</th>
<th>Quality</th>
</tr>
</thead>
<tfoot>
<tr>
<th class="nowrap" colspan="5"> </th>
</tr>
</tfoot>
2015-03-31 00:07:24 +00:00
2014-09-30 22:20:37 +00:00
<tbody>
2015-03-31 00:07:24 +00:00
#for $ hItem in $ historyResults
#set $ curStatus , $ curQuality = $ Quality . splitCompositeStatus ( int ( $ hItem [ ' action ' ] ) )
2014-09-30 22:20:37 +00:00
<tr>
2015-03-31 00:07:24 +00:00
#set $ curdatetime = $ datetime . datetime . strptime ( str ( $ hItem [ ' date ' ] ) , $ history . dateFormat )
2015-05-07 00:36:40 +00:00
<td><div class=" ${ fuzzydate } "> $ sbdatetime . sbdatetime . sbfdatetime ( $ curdatetime , show_seconds=True)</div><span class="sort-data"> $ time . mktime ( $ curdatetime . timetuple ())</span></td>
2015-03-31 00:07:24 +00:00
<td class="tvShow"><a href=" $ sbRoot /home/displayShow?show= $ hItem ['showid'] #season - $ hItem [ ' season ' ] " >$hItem[ ' show_name ' ] - < % = ' S %02i ' % i nt(hItem[ ' season ' ]) + ' E %02i ' % i nt(hItem[ ' episode ' ]) % > # if 'proper' in $ hItem ['resource'].lower or 'repack' in $ hItem ['resource'].lower then ' <span class="quality Proper">Proper</span>' else '' #</a></td>
<td #echo ( ' ' , ' class= " subtitles_column " ' ) [ $ curStatus == SUBTITLED ] # >
#if SUBTITLED == $ curStatus
<img width="16" height="11" src=" $ sbRoot /images/flags/<%= hItem["resource"][len(hItem["resource"])-6:len(hItem["resource"])-4] + '.png' %>">
#end if
<span class="help" title=" $ os . path . basename ( $ hItem ["resource"])"> $ statusStrings [ $ curStatus ]</span>
2014-09-30 22:20:37 +00:00
</td>
2015-03-31 00:07:24 +00:00
<td class="provider">
#if DOWNLOADED == $ curStatus
#if ' -1 ' != $ hItem [ ' provider ' ]
<span><i> $ hItem ['provider']</i></span>
#end if
#else
#if 0 < $ hItem [ ' provider ' ]
#if $ curStatus in [ SNATCHED , FAILED ]
#set $ provider = $ providers . getProviderClass ( $ generic . GenericProvider . makeID ( $ hItem [ ' provider ' ] ) )
#if None is not $ provider
<img src=" $ sbRoot /images/providers/<%= provider.imageName() %>" width="16" height="16" /><span> $ provider . name </span>
#else
<img src=" $ sbRoot /images/providers/missing.png" width="16" height="16" title="missing provider" /><span>Missing Provider</span>
#end if
#else
<img src=" $ sbRoot /images/subtitles/<%= hItem['provider']+'.png' %>" width="16" height="16" /><span><%= hItem['provider'].capitalize() %></span>
#end if
#end if
#end if
2014-09-30 22:20:37 +00:00
</td>
2015-03-31 00:07:24 +00:00
<td><span style="display:none"> $ curQuality </span><span class="quality $ Quality . qualityStrings [ $ curQuality ].replace('720p', 'HD720p').replace('1080p', 'HD1080p').replace('RawHD TV', 'RawHD').replace('HD TV', 'HD720p')"> $ Quality . qualityStrings [ $ curQuality ]</span></td>
2014-09-30 22:20:37 +00:00
</tr>
2015-03-31 00:07:24 +00:00
#end for
2014-03-10 05:18:05 +00:00
2015-03-31 00:07:24 +00:00
#else
2014-09-30 22:20:37 +00:00
<thead>
<tr>
<th class="nowrap">Time</th>
2015-03-31 00:07:24 +00:00
<th width=" #echo ' 3 %s %% ' % ( ' 5 ' , ' 0 ' ) [ sickbeard . USE_SUBTITLES ] # ">Episode</th>
2014-09-30 22:20:37 +00:00
<th>Snatched</th>
<th>Downloaded</th>
2015-03-31 00:07:24 +00:00
#if sickbeard . USE_SUBTITLES
2014-09-30 22:20:37 +00:00
<th>Subtitled</th>
2015-03-31 00:07:24 +00:00
#end if
<th width="14%">Quality</th>
2014-09-30 22:20:37 +00:00
</tr>
</thead>
2015-03-31 00:07:24 +00:00
2014-09-30 22:20:37 +00:00
<tfoot>
<tr>
<th class="nowrap" colspan="6"> </th>
</tr>
</tfoot>
2015-03-31 00:07:24 +00:00
2014-09-30 22:20:37 +00:00
<tbody>
2015-03-31 00:07:24 +00:00
#for $ hItem in $ compactResults
#set $ curdatetime = $ datetime . datetime . strptime ( str ( $ hItem [ ' actions ' ] [ 0 ] [ ' time ' ] ) , $ history . dateFormat )
#set $ prov_list = [ ]
#set $ down_list = [ ]
#set $ order = 1
#set $ ordinal_indicators = { ' 1 ' : ' st ' , ' 2 ' : ' nd ' , ' 3 ' : ' rd ' }
#for $ action in reversed ( $ hItem [ ' actions ' ] )
#set $ curStatus , $ curQuality = $ Quality . splitCompositeStatus ( int ( $ action [ ' action ' ] ) )
#set $ basename = $ os . path . basename ( $ action [ ' resource ' ] )
#if $ curStatus in [ SNATCHED , FAILED ]
#set $ provider = $ providers . getProviderClass ( $ generic . GenericProvider . makeID ( $ action [ ' provider ' ] ) )
#if None is not $ provider
2015-04-17 01:08:50 +00:00
#set $ prov_list + = [ ' <span %s ><img class= " help " src= " %s /images/providers/ %s " width= " 16 " height= " 16 " alt= " %s " title= " %s .. %s : %s " /></span> ' \
% (('', ' class="fail"')[FAILED == $ curStatus ], $ sbRoot , $ provider . imageName (), $ provider . name ,
('%s%s' % ( $ order , 'th' if $ order in [11, 12, 13] or str( $ order )[-1] not in $ ordinal_indicators else $ ordinal_indicators [str( $ order )[-1]]), 'Snatch failed')[FAILED == $ curStatus ],
2015-03-31 00:07:24 +00:00
$ provider . name , $ basename )]
2015-04-17 01:08:50 +00:00
#set $ order + = ( 0 , 1 ) [ SNATCHED == $ curStatus ]
2015-03-31 00:07:24 +00:00
#else
#set $ prov_list + = [ ' <img src= " %s /images/providers/missing.png " width= " 16 " height= " 16 " alt= " missing provider " title= " missing provider " /> ' \
% $ sbRoot ]
#end if
#end if
2015-04-17 01:08:50 +00:00
#if $ curStatus in [ DOWNLOADED , ARCHIVED ]
2015-03-31 00:07:24 +00:00
#set $ match = $ re . search ( ' \ -( \ w+) \ . \ w {3} \ Z ' , $ basename )
#set $ non_scene_note = ' '
#if not $ match
## This fallback is for when idiots add a space and word to a release group. The space is converted
## to '\' which makes the regex parsing the scene group name fail, therefore we arrive here.
## A better solution would be to find where such data is parsed and saved to the db and perhaps
## fix at that point. But, in the meantime...
#set $ non_scene_resource = re . sub ( r ' ( \ - \ w+)([ \\ ] \ w+)?( \ . \ w {3} ) \ Z ' , r ' \ 1 \ 3 ' , $ action [ ' resource ' ] )
#if $ non_scene_resource
#set $ non_scene_note = ' (Non scene name: %s ) ' % $ action [ ' resource ' ] . partition ( ' - ' ) [ - 1 ]
#set $ basename = $ os . path . basename ( $ non_scene_resource )
#set $ match = $ re . search ( ' \ -( \ w+) \ . \ w {3} \ Z ' , $ basename )
#end if
#end if
#if $ match
#if $ match . group ( 1 ) . upper ( ) in ( ' X264 ' , ' 720P ' )
#set $ match = $ re . search ( ' ( \ w+) \ -.* \ - ' + $ match . group ( 1 ) + ' \ . \ w {3} \ Z ' , $ os . path . basename ( $ hItem [ ' resource ' ] ) , re . I )
#end if
#if $ match
#set $ down_list + = [ ' <span class= " help " title= " %s %s " ><i> %s </i></span> ' \
% ( $ basename , $ non_scene_note , $ match . group (1).upper())]
#end if
#end if
#end if
#end for
2014-09-30 22:20:37 +00:00
<tr>
2015-05-07 00:36:40 +00:00
<td><div class=" ${ fuzzydate } "> $ sbdatetime . sbdatetime . sbfdatetime ( $ curdatetime , show_seconds=True)</div><span class="sort-data"> $ time . mktime ( $ curdatetime . timetuple ())</span></td>
2015-03-31 00:07:24 +00:00
<td class="tvShow">
<span><a href=" $ sbRoot /home/displayShow?show= $ hItem ['show_id'] #season - $ hItem [ ' season ' ] " >$hItem[ ' show_name ' ] - < % = ' S %02i ' % i nt(hItem[ ' season ' ]) + ' E %02i ' % i nt(hItem[ ' episode ' ]) % > # if 'proper' in $ hItem ['resource'].lower or 'repack' in $ hItem ['resource'].lower then ' <span class="quality Proper">Proper</span>' else '' #</a></span>
2014-09-30 22:20:37 +00:00
</td>
2015-03-31 00:07:24 +00:00
<td class="provider" provider="<%= str(sorted(hItem['actions'])[0]['provider']) %>">
#echo ' ' . join ( $ prov_list ) #
2014-09-30 22:20:37 +00:00
</td>
2015-03-31 00:07:24 +00:00
<td>
#echo ' ' . join ( $ down_list ) #
2014-09-30 22:20:37 +00:00
</td>
2015-03-31 00:07:24 +00:00
#if sickbeard . USE_SUBTITLES
<td>
#for $ action in reversed ( $ hItem [ ' actions ' ] )
#set $ curStatus , $ curQuality = $ Quality . splitCompositeStatus ( int ( $ action [ ' action ' ] ) )
#if SUBTITLED == $ curStatus
<img src=" $ sbRoot /images/subtitles/<%= action['provider'] + '.png' %>" width="16" height="16" alt=" $ action ['provider']" title="<%= action['provider'].capitalize() %>: $ os . path . basename ( $ action ['resource'])" />
<span> / </span>
<img width="16" height="11" src=" $ sbRoot /images/flags/<%= action['resource'][len(action['resource'])-6:len(action['resource'])-4] + '.png' %>" style="vertical-align:middle !important">
#end if
#end for
</td>
#end if
<td quality=" $ curQuality "><span class="quality $ Quality . qualityStrings [ $ curQuality ].replace('720p', 'HD720p').replace('1080p', 'HD1080p').replace('RawHD TV', 'RawHD').replace('HD TV', 'HD720p')"> $ Quality . qualityStrings [ $ curQuality ]</span></td>
2014-09-30 22:20:37 +00:00
</tr>
2015-03-31 00:07:24 +00:00
#end for
2014-03-10 05:18:05 +00:00
#end if
2015-03-31 00:07:24 +00:00
</tbody>
</table>
2015-05-07 00:36:40 +00:00
2015-03-31 00:07:24 +00:00
#include $ os . path . join ( $ sickbeard . PROG_DIR , ' gui/slick/interfaces/default/inc_bottom.tmpl ' )