allow approving all requests by category

This commit is contained in:
Drewster727 2016-03-27 18:10:20 -05:00
parent 3d944b32a8
commit e1b8293fdd
3 changed files with 174 additions and 42 deletions

View file

@ -20,8 +20,7 @@ var mixItUpDefault = {
} }
}; };
movieLoad(); initLoad();
tvLoad();
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
@ -51,7 +50,17 @@ $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
}); });
// Approve all // Approve all
$('#approveAll').click(function () { $('#approveAll').click(function (e) {
e.preventDefault();
var buttonId = e.target.id;
var origHtml = $(this).html();
if ($('#' + buttonId).text() === " Loading...") {
return;
}
loadingButton(buttonId, "success");
$.ajax({ $.ajax({
type: 'post', type: 'post',
url: '/approval/approveall', url: '/approval/approveall',
@ -59,11 +68,75 @@ $('#approveAll').click(function () {
success: function (response) { success: function (response) {
if (checkJsonResponse(response)) { if (checkJsonResponse(response)) {
generateNotify("Success! All requests approved!", "success"); generateNotify("Success! All requests approved!", "success");
initLoad();
} }
}, },
error: function (e) { error: function (e) {
console.log(e); console.log(e);
generateNotify("Something went wrong!", "danger"); generateNotify("Something went wrong!", "danger");
},
complete: function (e) {
finishLoading(buttonId, "success", origHtml)
}
});
});
$('#approveMovies').click(function (e) {
e.preventDefault();
var buttonId = e.target.id;
var origHtml = $(this).html();
if ($('#' + buttonId).text() === " Loading...") {
return;
}
loadingButton(buttonId, "success");
$.ajax({
type: 'post',
url: '/approval/approveallmovies',
dataType: "json",
success: function (response) {
if (checkJsonResponse(response)) {
generateNotify("Success! All Movie requests approved!", "success");
movieLoad();
}
},
error: function (e) {
console.log(e);
generateNotify("Something went wrong!", "danger");
},
complete: function (e) {
finishLoading(buttonId, "success", origHtml)
}
});
});
$('#approveTVShows').click(function (e) {
e.preventDefault();
var buttonId = e.target.id;
var origHtml = $(this).html();
if ($('#' + buttonId).text() === " Loading...") {
return;
}
loadingButton(buttonId, "success");
$.ajax({
type: 'post',
url: '/approval/approvealltvshows',
dataType: "json",
success: function (response) {
if (checkJsonResponse(response)) {
generateNotify("Success! All TV Show requests approved!", "success");
tvLoad();
}
},
error: function (e) {
console.log(e);
generateNotify("Something went wrong!", "danger");
},
complete: function (e) {
finishLoading(buttonId, "success", origHtml)
} }
}); });
}); });
@ -321,29 +394,44 @@ function mixItUpConfig(activeState) {
return conf; return conf;
}; };
function initLoad() {
movieLoad();
tvLoad();
}
function movieLoad() { function movieLoad() {
$("#movieList").html(""); var $ml = $('#movieList');
if ($ml.mixItUp('isLoaded')) {
activeState = $ml.mixItUp('getState');
$ml.mixItUp('destroy');
}
$ml.html("");
$.ajax("/requests/movies/").success(function (results) { $.ajax("/requests/movies/").success(function (results) {
results.forEach(function (result) { results.forEach(function (result) {
var context = buildRequestContext(result, "movie"); var context = buildRequestContext(result, "movie");
var html = searchTemplate(context); var html = searchTemplate(context);
$("#movieList").append(html); $ml.append(html);
}); });
$('#movieList').mixItUp(mixItUpConfig()); $ml.mixItUp(mixItUpConfig());
}); });
}; };
function tvLoad() { function tvLoad() {
$("#tvList").html(""); var $tvl = $('#tvList');
if ($tvl.mixItUp('isLoaded')) {
activeState = $tvl.mixItUp('getState');
$tvl.mixItUp('destroy');
}
$tvl.html("");
$.ajax("/requests/tvshows/").success(function (results) { $.ajax("/requests/tvshows/").success(function (results) {
results.forEach(function (result) { results.forEach(function (result) {
var context = buildRequestContext(result, "tv"); var context = buildRequestContext(result, "tv");
var html = searchTemplate(context); var html = searchTemplate(context);
$("#tvList").append(html); $tvl.append(html);
}); });
$('#tvList').mixItUp(mixItUpConfig()); $tvl.mixItUp(mixItUpConfig());
}); });
}; };
@ -374,16 +462,4 @@ function buildRequestContext(result, type) {
}; };
return context; return context;
}
function startFilter(elementId) {
$('#' + element).mixItUp({
load: {
filter: activeState.activeFilter || 'all',
sort: activeState.activeSort || 'default:asc'
},
layout: {
display: 'block'
}
});
} }

View file

@ -61,6 +61,8 @@ namespace PlexRequests.UI.Modules
Post["/approve"] = parameters => Approve((int)Request.Form.requestid); Post["/approve"] = parameters => Approve((int)Request.Form.requestid);
Post["/approveall"] = x => ApproveAll(); Post["/approveall"] = x => ApproveAll();
Post["/approveallmovies"] = x => ApproveAllMovies();
Post["/approvealltvshows"] = x => ApproveAllTVShows();
} }
private IRequestService Service { get; } private IRequestService Service { get; }
@ -216,6 +218,56 @@ namespace PlexRequests.UI.Modules
}); });
} }
private Response ApproveAllMovies()
{
if (!Context.CurrentUser.IsAuthenticated())
{
return Response.AsJson(new JsonResponseModel { Result = false, Message = "You are not an Admin, so you cannot approve any requests." });
}
var requests = Service.GetAll().Where(x => x.Approved == false && x.Type == RequestType.Movie);
var requestedModels = requests as RequestedModel[] ?? requests.ToArray();
if (!requestedModels.Any())
{
return Response.AsJson(new JsonResponseModel { Result = false, Message = "There are no movie requests to approve. Please refresh." });
}
try
{
return UpdateRequests(requestedModels);
}
catch (Exception e)
{
Log.Fatal(e);
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Something bad happened, please check the logs!" });
}
}
private Response ApproveAllTVShows()
{
if (!Context.CurrentUser.IsAuthenticated())
{
return Response.AsJson(new JsonResponseModel { Result = false, Message = "You are not an Admin, so you cannot approve any requests." });
}
var requests = Service.GetAll().Where(x => x.Approved == false && x.Type == RequestType.TvShow);
var requestedModels = requests as RequestedModel[] ?? requests.ToArray();
if (!requestedModels.Any())
{
return Response.AsJson(new JsonResponseModel { Result = false, Message = "There are no tv show requests to approve. Please refresh." });
}
try
{
return UpdateRequests(requestedModels);
}
catch (Exception e)
{
Log.Fatal(e);
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Something bad happened, please check the logs!" });
}
}
/// <summary> /// <summary>
/// Approves all. /// Approves all.
/// </summary> /// </summary>
@ -234,16 +286,28 @@ namespace PlexRequests.UI.Modules
return Response.AsJson(new JsonResponseModel { Result = false, Message = "There are no requests to approve. Please refresh." }); return Response.AsJson(new JsonResponseModel { Result = false, Message = "There are no requests to approve. Please refresh." });
} }
try
{
return UpdateRequests(requestedModels);
}
catch (Exception e)
{
Log.Fatal(e);
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Something bad happened, please check the logs!" });
}
}
private Response UpdateRequests(RequestedModel[] requestedModels)
{
var cpSettings = CpService.GetSettings(); var cpSettings = CpService.GetSettings();
var updatedRequests = new List<RequestedModel>(); var updatedRequests = new List<RequestedModel>();
foreach (var r in requestedModels) foreach (var r in requestedModels)
{ {
if (r.Type == RequestType.Movie) if (r.Type == RequestType.Movie)
{ {
var result = SendMovie(cpSettings, r, CpApi); var res = SendMovie(cpSettings, r, CpApi);
if (result) if (res)
{ {
r.Approved = true; r.Approved = true;
updatedRequests.Add(r); updatedRequests.Add(r);
@ -260,8 +324,8 @@ namespace PlexRequests.UI.Modules
var sonarr = SonarrSettings.GetSettings(); var sonarr = SonarrSettings.GetSettings();
if (sr.Enabled) if (sr.Enabled)
{ {
var result = sender.SendToSickRage(sr, r); var res = sender.SendToSickRage(sr, r);
if (result?.result == "success") if (res?.result == "success")
{ {
r.Approved = true; r.Approved = true;
updatedRequests.Add(r); updatedRequests.Add(r);
@ -269,14 +333,14 @@ namespace PlexRequests.UI.Modules
else else
{ {
Log.Error("Could not approve and send the TV {0} to SickRage!", r.Title); Log.Error("Could not approve and send the TV {0} to SickRage!", r.Title);
Log.Error("SickRage Message: {0}", result?.message); Log.Error("SickRage Message: {0}", res?.message);
} }
} }
if (sonarr.Enabled) if (sonarr.Enabled)
{ {
var result = sender.SendToSonarr(sonarr, r); var res = sender.SendToSonarr(sonarr, r);
if (result != null) if (res != null)
{ {
r.Approved = true; r.Approved = true;
updatedRequests.Add(r); updatedRequests.Add(r);
@ -288,20 +352,10 @@ namespace PlexRequests.UI.Modules
} }
} }
} }
try var result = Service.BatchUpdate(updatedRequests);
{ return Response.AsJson(result
var result = Service.BatchUpdate(updatedRequests); return Response.AsJson(result
? new JsonResponseModel { Result = true } ? new JsonResponseModel { Result = true }
: new JsonResponseModel { Result = false, Message = "We could not approve all of the requests. Please try again or check the logs." }); : new JsonResponseModel { Result = false, Message = "We could not approve all of the requests. Please try again or check the logs." });
}
catch (Exception e)
{
Log.Fatal(e);
return Response.AsJson(new JsonResponseModel { Result = false, Message = "Something bad happened, please check the logs!" });
}
} }
private bool SendMovie(CouchPotatoSettings settings, RequestedModel r, ICouchPotatoApi cp) private bool SendMovie(CouchPotatoSettings settings, RequestedModel r, ICouchPotatoApi cp)

View file

@ -5,6 +5,8 @@
@if (Context.CurrentUser.IsAuthenticated()) @if (Context.CurrentUser.IsAuthenticated())
{ {
<button id="approveAll" class="btn btn-success-outline" type="submit"><i class="fa fa-plus"></i> Approve All</button> <button id="approveAll" class="btn btn-success-outline" type="submit"><i class="fa fa-plus"></i> Approve All</button>
<button id="approveMovies" class="btn btn-success-outline" type="submit"><i class="fa fa-plus"></i> Approve Movies</button>
<button id="approveTVShows" class="btn btn-success-outline" type="submit"><i class="fa fa-plus"></i> Approve TV Shows</button>
<br /> <br />
<br /> <br />
} }