diff --git a/PlexRequests.UI/Content/requests.js b/PlexRequests.UI/Content/requests.js
index bbca674af..46154ac6e 100644
--- a/PlexRequests.UI/Content/requests.js
+++ b/PlexRequests.UI/Content/requests.js
@@ -20,8 +20,7 @@ var mixItUpDefault = {
}
};
-movieLoad();
-tvLoad();
+initLoad();
$('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
-$('#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({
type: 'post',
url: '/approval/approveall',
@@ -59,11 +68,75 @@ $('#approveAll').click(function () {
success: function (response) {
if (checkJsonResponse(response)) {
generateNotify("Success! All requests approved!", "success");
+ initLoad();
}
},
error: function (e) {
console.log(e);
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;
};
+function initLoad() {
+ movieLoad();
+ tvLoad();
+}
+
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) {
results.forEach(function (result) {
var context = buildRequestContext(result, "movie");
var html = searchTemplate(context);
- $("#movieList").append(html);
+ $ml.append(html);
});
- $('#movieList').mixItUp(mixItUpConfig());
+ $ml.mixItUp(mixItUpConfig());
});
};
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) {
results.forEach(function (result) {
var context = buildRequestContext(result, "tv");
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;
-}
-
-function startFilter(elementId) {
- $('#' + element).mixItUp({
- load: {
- filter: activeState.activeFilter || 'all',
- sort: activeState.activeSort || 'default:asc'
- },
- layout: {
- display: 'block'
- }
- });
}
\ No newline at end of file
diff --git a/PlexRequests.UI/Modules/ApprovalModule.cs b/PlexRequests.UI/Modules/ApprovalModule.cs
index b2c6217bb..dd036965e 100644
--- a/PlexRequests.UI/Modules/ApprovalModule.cs
+++ b/PlexRequests.UI/Modules/ApprovalModule.cs
@@ -61,6 +61,8 @@ namespace PlexRequests.UI.Modules
Post["/approve"] = parameters => Approve((int)Request.Form.requestid);
Post["/approveall"] = x => ApproveAll();
+ Post["/approveallmovies"] = x => ApproveAllMovies();
+ Post["/approvealltvshows"] = x => ApproveAllTVShows();
}
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!" });
+ }
+ }
+
///
/// Approves all.
///
@@ -234,16 +286,28 @@ namespace PlexRequests.UI.Modules
return Response.AsJson(new JsonResponseModel { Result = false, Message = "There are no requests to approve. Please refresh." });
}
- var cpSettings = CpService.GetSettings();
+ 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 updatedRequests = new List();
foreach (var r in requestedModels)
{
if (r.Type == RequestType.Movie)
{
- var result = SendMovie(cpSettings, r, CpApi);
- if (result)
+ var res = SendMovie(cpSettings, r, CpApi);
+ if (res)
{
r.Approved = true;
updatedRequests.Add(r);
@@ -260,8 +324,8 @@ namespace PlexRequests.UI.Modules
var sonarr = SonarrSettings.GetSettings();
if (sr.Enabled)
{
- var result = sender.SendToSickRage(sr, r);
- if (result?.result == "success")
+ var res = sender.SendToSickRage(sr, r);
+ if (res?.result == "success")
{
r.Approved = true;
updatedRequests.Add(r);
@@ -269,14 +333,14 @@ namespace PlexRequests.UI.Modules
else
{
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)
{
- var result = sender.SendToSonarr(sonarr, r);
- if (result != null)
+ var res = sender.SendToSonarr(sonarr, r);
+ if (res != null)
{
r.Approved = true;
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 = 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)
diff --git a/PlexRequests.UI/Views/Requests/Index.cshtml b/PlexRequests.UI/Views/Requests/Index.cshtml
index bf79ac7dd..67ed20378 100644
--- a/PlexRequests.UI/Views/Requests/Index.cshtml
+++ b/PlexRequests.UI/Views/Requests/Index.cshtml
@@ -5,6 +5,8 @@
@if (Context.CurrentUser.IsAuthenticated())
{
+
+
}