System/PendingProcessing grid converted to Datatables.

Misnamed Controller and Views removed.
This commit is contained in:
Mark McDowall 2012-02-09 23:11:56 -08:00
parent f21f3517cf
commit d6e4c5fc53
6 changed files with 79 additions and 203 deletions

View File

@ -1,36 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using NzbDrone.Core.Providers;
using NzbDrone.Web.Models;
using Telerik.Web.Mvc;
namespace NzbDrone.Web.Controllers
{
public class MisnamedController : Controller
{
private readonly MisnamedProvider _misnamedProvider;
public MisnamedController(MisnamedProvider misnamedProvider)
{
_misnamedProvider = misnamedProvider;
}
public ActionResult Index()
{
return View();
}
[GridAction(EnableCustomBinding = true)]
public ActionResult _AjaxBinding(GridCommand gridCommand)
{
var totalItems = 0;
var misnamed = _misnamedProvider.MisnamedFiles(gridCommand.Page, gridCommand.PageSize, out totalItems);
return View(new GridModel{ Data = misnamed, Total = totalItems });
}
}
}

View File

@ -40,25 +40,5 @@ namespace NzbDrone.Web.Controllers
return View((object)serialized); return View((object)serialized);
} }
[GridAction]
public ActionResult _AjaxBinding()
{
var missingEpisodes = _episodeProvider.EpisodesWithoutFiles(false);
var missing = missingEpisodes.Select(e => new MissingEpisodeModel
{
EpisodeId = e.EpisodeId,
SeriesId = e.SeriesId,
EpisodeNumbering = string.Format("{0}x{1:00}", e.SeasonNumber, e.EpisodeNumber),
EpisodeTitle = e.Title,
Overview = e.Overview,
SeriesTitle = e.Series.Title,
AirDate = e.AirDate.Value.ToString(),
AirDateString = e.AirDate.Value.ToBestDateString()
});
return View(new GridModel(missing));
}
} }
} }

View File

@ -109,12 +109,7 @@ namespace NzbDrone.Web.Controllers
public ActionResult PendingProcessing() public ActionResult PendingProcessing()
{ {
ViewData["DropDir"] = _configProvider.SabDropDirectory; ViewData["DropDir"] = _configProvider.SabDropDirectory;
return View();
}
[GridAction]
public ActionResult _PendingProcessingAjaxBinding()
{
var dropDir = _configProvider.SabDropDirectory; var dropDir = _configProvider.SabDropDirectory;
var subFolders = _diskProvider.GetDirectories(dropDir); var subFolders = _diskProvider.GetDirectories(dropDir);
@ -125,7 +120,7 @@ namespace NzbDrone.Web.Controllers
{ {
var model = new PendingProcessingModel(); var model = new PendingProcessingModel();
model.Name = new DirectoryInfo(folder).Name; model.Name = new DirectoryInfo(folder).Name;
model.Created = _diskProvider.DirectoryDateCreated(folder); model.Created = _diskProvider.DirectoryDateCreated(folder).ToString();
model.Path = folder.Replace(Path.DirectorySeparatorChar, '|').Replace(Path.VolumeSeparatorChar, '^').Replace('\'', '`'); model.Path = folder.Replace(Path.DirectorySeparatorChar, '|').Replace(Path.VolumeSeparatorChar, '^').Replace('\'', '`');
var files = _diskProvider.GetFileInfos(folder, "*.*", SearchOption.AllDirectories); var files = _diskProvider.GetFileInfos(folder, "*.*", SearchOption.AllDirectories);
@ -143,7 +138,9 @@ namespace NzbDrone.Web.Controllers
models.Add(model); models.Add(model);
} }
return View(new GridModel(models)); var serialized = new JavaScriptSerializer().Serialize(models);
return View((object)serialized);
} }
public JsonResult RenamePendingProcessing(string path) public JsonResult RenamePendingProcessing(string path)

View File

@ -8,7 +8,9 @@ namespace NzbDrone.Web.Models
{ {
public string Name { get; set; } public string Name { get; set; }
public string Files { get; set; } public string Files { get; set; }
public DateTime Created { get; set; } public string Created { get; set; }
public string Path { get; set; } public string Path { get; set; }
public string Actions { get; set; }
public string Details { get; set; }
} }
} }

View File

@ -1,93 +0,0 @@
@using NzbDrone.Common
@using NzbDrone.Core.Model
@{ViewBag.Title = "Misnamed";}
@section ActionMenu{
<ul class="sub-menu">
<li>@Ajax.ActionLink("Trim History", "Trim", "History", new AjaxOptions { OnSuccess = "reloadHistoryGrid" })</li>
<li>@Ajax.ActionLink("Purge History", "Purge", "History", new AjaxOptions { OnSuccess = "reloadHistoryGrid" })</li>
</ul>
}
<style>
.searchImage
{
width: 18px;
height: 18px;
padding: 1px;
margin: 2px;
@*border-width: 1px;
border-style: dashed;
border-color: lightgray;*@
}
.searchImage:hover
{
background-color: #065EFE;
}
</style>
<div class="grid-container">
@{Html.Telerik().Grid<MisnamedEpisodeModel>().Name("misnamed")
.TableHtmlAttributes(new { @class = "Grid" })
.Columns(columns =>
{
columns.Bound(c => c.SeriesTitle)
.ClientTemplate("<a href=" +
Url.Action("Details", "Series", new { seriesId = "<#= SeriesId #>" }) +
"><#= SeriesTitle #></a>")
.Title("Series Title");
columns.Bound(c => c.CurrentName).Title("Current Name");
columns.Bound(c => c.ProperName).Title("Proper Name");
columns.Bound(c => c.EpisodeFileId)
.Title("Actions")
.Width("40");
})
.DataBinding(data => data.Ajax().Select("_AjaxBinding", "Misnamed"))
.Pageable(
c =>
c.PageSize(20).Position(GridPagerPosition.Bottom).Style(GridPagerStyles.NextPrevious))
.EnableCustomBinding(true)
.ClientEvents(clientEvents =>
{
clientEvents.OnDataBound("grid_dataBound");
if (EnviromentProvider.IsProduction)
clientEvents.OnError("grid_onError");
})
.Render();}
</div>
<script type="text/javascript">
deleteHistoryRowUrl = '../History/Delete';
redownloadUrl = '../History/Redownload';
function reloadHistoryGrid() {
var grid = $('#history').data('tGrid');
grid.rebind();
grid.sort("Date-desc");
}
function deleteHistoryRow(historyId) {
$.ajax({
type: "POST",
url: deleteHistoryRowUrl,
data: jQuery.param({ historyId: historyId }),
success: function () {
reloadHistoryGrid();
}
});
}
function redownload(historyId, episodeId) {
$.ajax({
type: "POST",
url: redownloadUrl,
data: jQuery.param({ historyId: historyId, episodeId: episodeId }),
success: function () {
reloadHistoryGrid();
}
});
}
function grid_dataBound(e) {
var id = $(this).attr('id');
var lastButton = $('#' + id + ' .t-arrow-last');
lastButton.hide();
}
</script>

View File

@ -1,50 +1,76 @@
@model List<NzbDrone.Web.Models.PendingProcessingModel> @model string
@using NzbDrone.Web.Models @using NzbDrone.Web.Models
@{ViewBag.Title = "Pending Processing";} @{ViewBag.Title = "Pending Processing";}
@section ActionMenu{
@{Html.Telerik().Menu().Name("historyMenu").Items(items =>
{
items.Add().Text("Trim History").Action("Trim", "History");
items.Add().Text("Purge History").Action("Purge", "History");
}).Render();}
}
<div class="grid-container">
@{Html.Telerik().Grid<PendingProcessingModel>().Name("PendingProcessingGrid")
.TableHtmlAttributes(new { @class = "Grid" })
.Columns(columns =>
{
columns.Bound(c => c.Name);
columns.Bound(c => c.Created).Title("Creation Date");
columns.Bound(c => c.Path).Title("")
.ClientTemplate("<a href='#Rename' onClick=\"renamePending('<#= Path #>'); return false;\">Rename</a>");
})
.DetailView(detailView => detailView.ClientTemplate(
"<div><#= Files #></div>"
))
.DataBinding(data => data.Ajax().Select("_PendingProcessingAjaxBinding", "System"))
.Sortable(rows => rows.OrderBy(epSort => epSort.Add(c => c.Name).Ascending()).Enabled(true))
.Pageable(
c =>
c.PageSize(20).Position(GridPagerPosition.Bottom).Style(GridPagerStyles.NextPrevious))
.Render();}
</div>
<script type="text/javascript">
var renamePendingUrl = '@Url.Action("RenamePendingProcessing", "System")';
function renamePending(path) { <div class="grid-container">
$.ajax({ <table id="pendingProcessingGrid" class="dataTablesGrid hidden-grid">
type: "POST", <thead>
url: renamePendingUrl, <tr>
data: jQuery.param({ path: path }), <th>Name</th>
error: function (req, status, error) { <th>Creation Date</th>
alert("Sorry! We could rename " + name + " at this time. " + error); <th></th>
}, </tr>
success: function (data, textStatus, jqXHR) { </thead>
if (data == "ok") { <tbody>
var grid = $('#PendingProcessingGrid').data('tGrid'); </tbody>
grid.ajaxRequest(); </table>
} </div>
}
@section Scripts
{
<script type="text/javascript">
var renamePendingUrl = '@Url.Action("RenamePendingProcessing", "System")';
$(document).ready(function() {
$('#pendingProcessingGrid').removeClass('hidden-grid');
oTable = $('.dataTablesGrid').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: 'auto', "mDataProp": "Name"}, //Name
{ sWidth: '250px', "mDataProp": "Created"}, //CreationDate
{ sWidth: '40px', "mDataProp": "Actions", "bSortable": false, "fnRender": function (row) {
return "<a href='#Rename' onClick=\"renamePending('" + row.aData["Path"] + "'); return false;\">Rename</a>";
}
}, //Actions
{
sWidth: 'auto',
"mDataProp": "Details",
"bSortable": false,
"bVisible": false,
"fnRender": function(row) {
var result = "<div>" + row.aData["Files"] + "</div>";
return result;
}
} //Details
]
});
}); });
}
</script> function renamePending(path) {
$.ajax({
type: "POST",
url: renamePendingUrl,
data: jQuery.param({ path: path }),
error: function (req, status, error) {
alert("Sorry! We could rename " + name + " at this time. " + error);
},
success: function (data, textStatus, jqXHR) {
if (data == "ok") {
var grid = $('#PendingProcessingGrid').data('tGrid');
grid.ajaxRequest();
}
}
});
}
</script>
}