System/PendingProcessing grid converted to Datatables.

Misnamed Controller and Views removed.
pull/13/merge
Mark McDowall 13 years ago
parent f21f3517cf
commit d6e4c5fc53

@ -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 });
}
}
}

@ -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));
}
} }
} }

@ -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)

@ -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; }
} }
} }

@ -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>

@ -1,36 +1,61 @@
@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"> <div class="grid-container">
@{Html.Telerik().Grid<PendingProcessingModel>().Name("PendingProcessingGrid") <table id="pendingProcessingGrid" class="dataTablesGrid hidden-grid">
.TableHtmlAttributes(new { @class = "Grid" }) <thead>
.Columns(columns => <tr>
{ <th>Name</th>
columns.Bound(c => c.Name); <th>Creation Date</th>
columns.Bound(c => c.Created).Title("Creation Date"); <th></th>
columns.Bound(c => c.Path).Title("") </tr>
.ClientTemplate("<a href='#Rename' onClick=\"renamePending('<#= Path #>'); return false;\">Rename</a>"); </thead>
}) <tbody>
.DetailView(detailView => detailView.ClientTemplate( </tbody>
"<div><#= Files #></div>" </table>
))
.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> </div>
@section Scripts
{
<script type="text/javascript"> <script type="text/javascript">
var renamePendingUrl = '@Url.Action("RenamePendingProcessing", "System")'; 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
]
});
});
function renamePending(path) { function renamePending(path) {
$.ajax({ $.ajax({
type: "POST", type: "POST",
@ -48,3 +73,4 @@
}); });
} }
</script> </script>
}
Loading…
Cancel
Save