System/Jobs now uses DataTables

pull/6/head
Mark McDowall 13 years ago
parent 463ab0812e
commit 185edfb7f7

@ -36,15 +36,31 @@ namespace NzbDrone.Web.Controllers
public ActionResult Jobs() public ActionResult Jobs()
{ {
ViewData["Queue"] = _jobProvider.Queue.Select(c => new JobQueueItemModel var queue = _jobProvider.Queue.Select(c => new JobQueueItemModel
{ {
Name = c.JobType.Name, Name = c.JobType.Name,
TargetId = c.TargetId, TargetId = c.TargetId,
SecondaryTargetId = c.SecondaryTargetId SecondaryTargetId = c.SecondaryTargetId
}); });
var jobs = _jobProvider.All();
return View(jobs); var serializedQueue = new JavaScriptSerializer().Serialize(queue);
ViewData["Queue"] = serializedQueue;
var jobs = _jobProvider.All().Select(j => new JobModel
{
Id = j.Id,
Enable = j.Enable,
TypeName = j.TypeName,
Name = j.Name,
Interval = j.Interval,
LastExecution = j.LastExecution.ToString(),
Success = j.Success
}).OrderBy(j => j.Interval);
var serializedJobs = new JavaScriptSerializer().Serialize(jobs);
return View((object)serializedJobs);
} }
public ActionResult Indexers() public ActionResult Indexers()

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace NzbDrone.Web.Models
{
public class JobModel
{
public Int32 Id { get; set; }
public Boolean Enable { get; set; }
public String TypeName { get; set; }
public String Name { get; set; }
public Int32 Interval { get; set; }
public String LastExecution { get; set; }
public Boolean Success { get; set; }
public string Actions { get; set; }
}
}

@ -245,6 +245,7 @@
<Compile Include="Helpers\HtmlPrefixScopeExtensions.cs" /> <Compile Include="Helpers\HtmlPrefixScopeExtensions.cs" />
<Compile Include="Helpers\IsCurrentActionHelper.cs" /> <Compile Include="Helpers\IsCurrentActionHelper.cs" />
<Compile Include="Models\DataTablesParams.cs" /> <Compile Include="Models\DataTablesParams.cs" />
<Compile Include="Models\JobModel.cs" />
<Compile Include="Models\LogModel.cs" /> <Compile Include="Models\LogModel.cs" />
<Compile Include="Models\UpcomingEpisodesModel.cs" /> <Compile Include="Models\UpcomingEpisodesModel.cs" />
<Compile Include="Models\SeasonModel.cs" /> <Compile Include="Models\SeasonModel.cs" />

@ -71,7 +71,7 @@
{ sWidth: 'auto', "mDataProp": "SeriesTitle" }, //Series Title { sWidth: 'auto', "mDataProp": "SeriesTitle" }, //Series Title
{ sWidth: '80px', "mDataProp": "EpisodeNumbering", "bSortable": false }, //EpisodeNumbering { sWidth: '80px', "mDataProp": "EpisodeNumbering", "bSortable": false }, //EpisodeNumbering
{ sWidth: 'auto', "mDataProp": "EpisodeTitle", "bSortable": false }, //Episode Title { sWidth: 'auto', "mDataProp": "EpisodeTitle", "bSortable": false }, //Episode Title
{ sWidth: '70px', "mDataProp": "Quality", "bSoratble": false }, //Quality { sWidth: '70px', "mDataProp": "Quality", "bSortable": false }, //Quality
{ sWidth: '150px', "mDataProp": "Date" }, //Grabbed On { sWidth: '150px', "mDataProp": "Date" }, //Grabbed On
{ sWidth: '40px', "mDataProp": "HistoryId", "bSortable": false, "fnRender": function (row) { { sWidth: '40px', "mDataProp": "HistoryId", "bSortable": false, "fnRender": function (row) {
var deleteImage = "<img src=\"../../Content/Images/X.png\" alt=\"Delete\" title=\"Delete from History\" class=\"searchImage\" onclick=\"deleteHistory(this.parentNode.parentNode, " + row.aData["HistoryId"] + ")\">"; var deleteImage = "<img src=\"../../Content/Images/X.png\" alt=\"Delete\" title=\"Delete from History\" class=\"searchImage\" onclick=\"deleteHistory(this.parentNode.parentNode, " + row.aData["HistoryId"] + ")\">";

@ -1,9 +1,113 @@
@using NzbDrone.Web.Models @using NzbDrone.Web.Models
@using NzbDrone.Web.Helpers @using NzbDrone.Web.Helpers
@model IEnumerable<NzbDrone.Core.Repository.JobDefinition> @model string
@{ViewBag.Title = "Jobs";} @{ViewBag.Title = "Jobs";}
@{Html.Telerik().Grid(Model).Name("Grid") @section HeaderContent
{
@Html.IncludeCss("Grid.css")
}
<div class="grid-container">
<table id="jobGrid" class="dataTablesGrid hidden-grid no-details">
<thead>
<tr>
<th>ID</th>
<th>Enable</th>
<th>Type Name</th>
<th>Name</th>
<th>Interval</th>
<th>Last Execution</th>
<th>Success</th>
@*Commands Column*@
<th>Actions</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<h1>Items currently in queue</h1>
<div class="grid-container">
<table id="queueGrid" class="dataTablesGrid hidden-grid no-details">
<thead>
<tr>
<th>Type</th>
<th>Target</th>
<th>Secondary</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
@section Scripts{
<script type="text/javascript">
$(document).ready(function() {
$('#jobGrid').removeClass('hidden-grid');
oTable = $('#jobGrid').dataTable({
"bShowAll": false,
"aaData": @Html.Raw(Model),
"bPaginate": false,
"bLengthChange": false,
"bFilter": false,
"bSort": false,
"bInfo": false,
"bAutoWidth": false,
"iDisplayLength": 20,
"sPaginationType": "four_button",
"aoColumns": [
{ sWidth: '30px', "mDataProp": "Id"}, //Id
{ sWidth: '70px', "mDataProp": "Enable" }, //Enable
{ sWidth: '80px', "mDataProp": "TypeName" }, //TypeName
{ sWidth: 'auto', "mDataProp": "Name" }, //Name
{ sWidth: '70px', "mDataProp": "Interval" }, //Interval
{ sWidth: '150px', "mDataProp": "LastExecution" }, //LastExecution
{ sWidth: '80px', "mDataProp": "Success" }, //Success
{ sWidth: '40px', "mDataProp": "Actions", "bSortable": false, "fnRender": function (row) {
if (!row.aData["Enable"])
return "";
return createImageAjaxLink('/System/RunJob?typeName=' + row.aData["TypeName"], '../../Content/Images/Gear.png', 'Run', 'Run Job', 'searchImage');
//return createImageAjaxLink('/History/Delete?historyId=' + row.aData["HistoryId"], '../../Content/Images/X.png', 'Delete', 'Delete from History', 'searchImage');
}
} //Actions
],
"aaSorting": [[4, 'asc']]
});
$('#queueGrid').removeClass('hidden-grid');
oTable = $('#queueGrid').dataTable({
"bShowAll": false,
"aaData": @ViewData["Queue"],
"bPaginate": false,
"bLengthChange": false,
"bFilter": false,
"bSort": false,
"bInfo": false,
"bAutoWidth": false,
"iDisplayLength": 20,
"sPaginationType": "four_button",
"aoColumns": [
{ sWidth: 'auto', "mDataProp": "Type"}, //Type
{ sWidth: '100px', "mDataProp": "Target" }, //Target
{ sWidth: '100px', "mDataProp": "SecondaryTarget" }, //SecondaryTarget
]
});
});
</script>
}
@*@{Html.Telerik().Grid(Model).Name("Grid")
.Columns(c => c.Bound(g => g.Id)) .Columns(c => c.Bound(g => g.Id))
.Columns(c => c.Bound(g => g.Enable)) .Columns(c => c.Bound(g => g.Enable))
.Columns(c => c.Bound(g => g.TypeName)) .Columns(c => c.Bound(g => g.TypeName))
@ -28,4 +132,4 @@
.Columns(c => c.Bound(g => g.Name).Title("Type").Width(100)) .Columns(c => c.Bound(g => g.Name).Title("Type").Width(100))
.Columns(c => c.Bound(g => g.TargetId).Title("Target")) .Columns(c => c.Bound(g => g.TargetId).Title("Target"))
.Columns(c => c.Bound(g => g.SecondaryTargetId).Title("Secondary Target")) .Columns(c => c.Bound(g => g.SecondaryTargetId).Title("Secondary Target"))
.Render();} .Render();}*@
Loading…
Cancel
Save