mirror of
https://github.com/SickGear/SickGear.git
synced 2025-01-05 17:43:37 +00:00
Add "Order" table column and list failed from newest to oldest wherever possible on Manage Failed Downloads.
Add number of items shown to Manage Failed Downloads table footer and indicate if number of shown items is limited. Add sorting to "Provider" column and fix sorting of "Remove" column on Manage Failed Downloads. Fix "Limit" drop down on Manage Failed Downloads.
This commit is contained in:
parent
ec34d067ef
commit
9771eefc73
4 changed files with 119 additions and 105 deletions
|
@ -90,6 +90,10 @@
|
|||
* Change CPU throttling on General Config/Advanced to "Disabled" by default for new installs
|
||||
* Change provider OMGWTFNZBS api url and auto reject nuked releases
|
||||
* Change Search Provider page to load torrent settings only when Search torrents is enabled in Search Settings
|
||||
* Add "Order" table column and list failed from newest to oldest wherever possible on Manage Failed Downloads
|
||||
* Add number of items shown to Manage Failed Downloads table footer and indicate if number of shown items is limited
|
||||
* Add sorting to "Provider" column and fix sorting of "Remove" column on Manage Failed Downloads
|
||||
* Fix "Limit" drop down on Manage Failed Downloads
|
||||
|
||||
|
||||
### 0.11.12 (2016-06-20 02:20:00 UTC)
|
||||
|
|
|
@ -14,74 +14,66 @@
|
|||
#import os.path
|
||||
#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_top.tmpl')
|
||||
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
\$(document).ready(function()
|
||||
{
|
||||
\$('#failedTable:has(tbody tr)').tablesorter({
|
||||
widgets: ['zebra'],
|
||||
sortList: [[0,0]],
|
||||
headers: { 3: { sorter: false } }
|
||||
});
|
||||
\$('#limit').change(function(){
|
||||
url = '$sbRoot/manage/failedDownloads/?limit='+\$(this).val()
|
||||
window.location.href = url
|
||||
});
|
||||
});
|
||||
//-->
|
||||
</script>
|
||||
<script type="text/javascript" src="$sbRoot/js/failedDownloads.js?v=$sbPID"></script>
|
||||
<style>
|
||||
.tablesorter .tablesorter-header{padding: 4px 18px 4px 5px}
|
||||
</style>
|
||||
|
||||
#if $varExists('header')
|
||||
#if $varExists('header')
|
||||
<h1 class="header">$header</h1>
|
||||
#else
|
||||
#else
|
||||
<h1 class="title">$title</h1>
|
||||
#end if
|
||||
#set selected = ' selected="selected"'
|
||||
<div class="h2footer pull-right"><b>Limit:</b>
|
||||
<select id="limit" name="limit" class="form-control form-control-inline input-sm">
|
||||
<option value="0"#if '0' == $limit then $selected else ''#>All</option>
|
||||
<option value="100"#if '100' == $limit then $selected else ''#>100</option>
|
||||
<option value="250"#if '250' == $limit then $selected else ''#>250</option>
|
||||
<option value="500"#if '500' == $limit then $selected else ''#>500</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="h2footer pull-right"><b>Limit:</b>
|
||||
<select id="limit" name="limit" class="form-control form-control-inline input-sm">
|
||||
<option value="0"#if '0' == $limit then $selected else ''#>All</option>
|
||||
<option value="100"#if '100' == $limit then $selected else ''#>100</option>
|
||||
<option value="250"#if '250' == $limit then $selected else ''#>250</option>
|
||||
<option value="500"#if '500' == $limit then $selected else ''#>500</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<table id="failedTable" class="sickbeardTable tablesorter" border="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-nowrap text-left" style="width:75%">Release</th>
|
||||
<th style="width:10%">Size</th>
|
||||
<th style="width:14%">Provider</th>
|
||||
<th style="width:1%">Remove<br />
|
||||
<input id="removeCheck" type="checkbox" class="bulkCheck">
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<table id="failedTable" class="sickbeardTable tablesorter" border="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:1%">Order</th>
|
||||
<th class="text-nowrap text-left" style="width:74%">Release</th>
|
||||
<th style="width:10%">Size</th>
|
||||
<th style="width:14%">Provider</th>
|
||||
<th style="width:1%;padding: 4px 18px">Remove<br />
|
||||
<input id="removeCheck" type="checkbox" class="bulkCheck">
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td rowspan="1" colspan="4">
|
||||
<input id="submitMassRemove" type="button" class="btn pull-right" value="Submit">
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
#set $oldest = $len($failedResults)
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="4" class="text-left">
|
||||
$oldest items shown#if $getVar('over_limit', False)#, more are available by changing the limit#end if#
|
||||
</td>
|
||||
<td>
|
||||
<input id="submitMassRemove" type="button" class="btn" value="Submit">
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
|
||||
<tbody>
|
||||
#for $hItem in $failedResults
|
||||
<tr>
|
||||
<td class="text-nowrap text-left">#echo re.sub('"', '', $hItem['release'])#</td>
|
||||
<td>#echo ($hItem['size'], '?')[-1 == $hItem['size']]#</td>
|
||||
#set $provider = $providers.getProviderClass($generic.GenericProvider.make_id($hItem['provider']))
|
||||
#if None is not $provider:
|
||||
<td><img src="$sbRoot/images/providers/<%= provider.image_name() %>" width="16" height="16" alt="$provider.name" title="$provider.name" /></td>
|
||||
#else
|
||||
<td><img src="$sbRoot/images/providers/missing.png" width="16" height="16" alt="missing provider" title="missing provider" /></td>
|
||||
#end if
|
||||
<td><input type="checkbox" class="removeCheck" id="remove-#echo re.sub('"', '___', $hItem['release'])#" /></td>
|
||||
</tr>
|
||||
<tbody>
|
||||
#set $order = $oldest
|
||||
#for $hItem in $failedResults[::-1]
|
||||
#set $provider = $providers.getProviderClass($generic.GenericProvider.make_id($hItem['provider']))
|
||||
#set $provider_name = None is not $provider and $provider.name or 'missing provider'
|
||||
#set $provider_image = None is not $provider and $provider.image_name() or 'missing.png'
|
||||
<tr>
|
||||
<td data-order="$order">#echo 1 == $order and 'Newest' or $oldest == $order and 'Oldest' or '-'##set $order -= 1#</td>
|
||||
<td class="text-nowrap text-left">#echo re.sub('"', '', $hItem['release'])#</td>
|
||||
<td>#echo ($hItem['size'], '?')[-1 == $hItem['size']]#</td>
|
||||
<td><img src="$sbRoot/images/providers/$provider_image" width="16" height="16" alt="$provider_name" title="$provider_name"></td>
|
||||
<td data-order="0"><input type="checkbox" class="removeCheck" id="remove-#echo re.sub('"', '___', $hItem['release'])#"></td>
|
||||
</tr>
|
||||
#end for
|
||||
</tbody>
|
||||
</table>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_bottom.tmpl')
|
||||
#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_bottom.tmpl')
|
||||
|
|
|
@ -1,60 +1,75 @@
|
|||
$(document).ready(function(){
|
||||
$('#submitMassRemove').click(function(){
|
||||
$(document).ready(function() {
|
||||
|
||||
var removeArr = new Array()
|
||||
$('#limit').change(function() {
|
||||
window.location.href = sbRoot + '/manage/failedDownloads/?limit=' + $(this).val();
|
||||
});
|
||||
|
||||
$('.removeCheck').each(function() {
|
||||
if (this.checked == true) {
|
||||
removeArr.push($(this).attr('id').split('-')[1])
|
||||
}
|
||||
});
|
||||
$('#submitMassRemove').click(function() {
|
||||
|
||||
if (removeArr.length == 0)
|
||||
return false
|
||||
var removeArr = [];
|
||||
|
||||
url = sbRoot + '/manage/failedDownloads?toRemove='+removeArr.join('|')
|
||||
$('.removeCheck').each(function() {
|
||||
if (!0 == this.checked) {
|
||||
removeArr.push($(this).attr('id').split('-')[1])
|
||||
}
|
||||
});
|
||||
|
||||
window.location.href = url
|
||||
if (0 == removeArr.length)
|
||||
return !1;
|
||||
|
||||
});
|
||||
window.location.href = sbRoot + '/manage/failedDownloads?toRemove=' + removeArr.join('|');
|
||||
});
|
||||
|
||||
$('.bulkCheck').click(function(){
|
||||
$('.bulkCheck').click(function() {
|
||||
|
||||
var bulkCheck = this;
|
||||
var whichBulkCheck = $(bulkCheck).attr('id');
|
||||
var bulkCheck = this, whichBulkCheck = $(bulkCheck).attr('id');
|
||||
|
||||
$('.'+whichBulkCheck+':visible').each(function(){
|
||||
this.checked = bulkCheck.checked
|
||||
});
|
||||
});
|
||||
$('.' + whichBulkCheck + ':visible').each(function() {
|
||||
this.checked = bulkCheck.checked
|
||||
});
|
||||
});
|
||||
|
||||
['.removeCheck'].forEach(function(name) {
|
||||
var lastCheck = null;
|
||||
['.removeCheck'].forEach(function(name) {
|
||||
|
||||
$(name).click(function(event) {
|
||||
var lastCheck = null;
|
||||
|
||||
if(!lastCheck || !event.shiftKey) {
|
||||
lastCheck = this;
|
||||
return;
|
||||
}
|
||||
$(name).click(function(event) {
|
||||
|
||||
var check = this;
|
||||
var found = 0;
|
||||
var table$ = $('#failedTable');
|
||||
if(!lastCheck || !event.shiftKey) {
|
||||
lastCheck = this;
|
||||
$(this).parent('td').attr('data-order', this.checked ? '1' : '0');
|
||||
table$.trigger('update');
|
||||
return;
|
||||
}
|
||||
|
||||
$(name+':visible').each(function() {
|
||||
switch (found) {
|
||||
case 2: return false;
|
||||
case 1:
|
||||
this.checked = lastCheck.checked;
|
||||
}
|
||||
var check = this, found = 0;
|
||||
|
||||
if (this == check || this == lastCheck)
|
||||
found++;
|
||||
});
|
||||
$(name + ':visible').each(function() {
|
||||
switch (found) {
|
||||
case 2:
|
||||
return !1;
|
||||
case 1:
|
||||
this.checked = lastCheck.checked;
|
||||
$(this).parent('td').attr('data-order', this.checked ? '1' : '0');
|
||||
}
|
||||
|
||||
});
|
||||
if (this == check || this == lastCheck)
|
||||
found++;
|
||||
});
|
||||
|
||||
});
|
||||
table$.trigger('update');
|
||||
});
|
||||
});
|
||||
|
||||
$('#failedTable:has(tbody tr)').tablesorter({
|
||||
widgets: ['zebra'],
|
||||
sortList: [[0,0]],
|
||||
sortAppend: [[0,0]],
|
||||
textExtraction: {
|
||||
0: function(node) { return $(node).attr('data-order'); },
|
||||
3: function(node) { return $(node).find('img').attr('title'); },
|
||||
4: function(node) { return $(node).attr('data-order'); }}
|
||||
});
|
||||
|
||||
});
|
||||
|
|
|
@ -3886,10 +3886,12 @@ class Manage(MainHandler):
|
|||
|
||||
myDB = db.DBConnection('failed.db')
|
||||
|
||||
if limit == '0':
|
||||
sqlResults = myDB.select('SELECT * FROM failed')
|
||||
sql = 'SELECT * FROM failed ORDER BY ROWID DESC'
|
||||
limit = helpers.tryInt(limit, 100)
|
||||
if not limit:
|
||||
sql_results = myDB.select(sql)
|
||||
else:
|
||||
sqlResults = myDB.select('SELECT * FROM failed LIMIT ?', [limit])
|
||||
sql_results = myDB.select(sql + ' LIMIT ?', [limit + 1])
|
||||
|
||||
toRemove = toRemove.split('|') if toRemove is not None else []
|
||||
|
||||
|
@ -3901,8 +3903,9 @@ class Manage(MainHandler):
|
|||
return self.redirect('/manage/failedDownloads/')
|
||||
|
||||
t = PageTemplate(headers=self.request.headers, file='manage_failedDownloads.tmpl')
|
||||
t.failedResults = sqlResults
|
||||
t.limit = limit
|
||||
t.over_limit = limit and len(sql_results) > limit
|
||||
t.failedResults = t.over_limit and sql_results[0:-1] or sql_results
|
||||
t.limit = str(limit)
|
||||
t.submenu = self.ManageMenu()
|
||||
|
||||
return t.respond()
|
||||
|
|
Loading…
Reference in a new issue