mirror of
https://github.com/Sonarr/Sonarr
synced 2024-12-26 01:37:07 +00:00
added JsonErrorFilter to automatically handle failing ajax calls.
This commit is contained in:
parent
7c6d745c86
commit
b8ac694fc4
5 changed files with 73 additions and 38 deletions
|
@ -9,6 +9,7 @@ using NzbDrone.Core.Jobs;
|
||||||
using NzbDrone.Core.Providers;
|
using NzbDrone.Core.Providers;
|
||||||
using NzbDrone.Core.Providers.Core;
|
using NzbDrone.Core.Providers.Core;
|
||||||
using NzbDrone.Core.Repository;
|
using NzbDrone.Core.Repository;
|
||||||
|
using NzbDrone.Web.Filters;
|
||||||
using NzbDrone.Web.Models;
|
using NzbDrone.Web.Models;
|
||||||
|
|
||||||
namespace NzbDrone.Web.Controllers
|
namespace NzbDrone.Web.Controllers
|
||||||
|
@ -130,7 +131,7 @@ namespace NzbDrone.Web.Controllers
|
||||||
|
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
return Json(new NotificationResult() { Title = "Failed", Text = ex.Message, NotificationType = NotificationType.Error});
|
return Json(new NotificationResult() { Title = "Failed", Text = ex.Message, NotificationType = NotificationType.Error });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,31 +177,20 @@ namespace NzbDrone.Web.Controllers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Root Directory
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
|
[JsonErrorFilter("Can't add root folder")]
|
||||||
public JsonResult SaveRootDir(string path)
|
public JsonResult SaveRootDir(string path)
|
||||||
{
|
{
|
||||||
if (String.IsNullOrWhiteSpace(path))
|
if (String.IsNullOrWhiteSpace(path))
|
||||||
return new JsonResult { Data = "failed" };
|
NotificationResult.Error("Can't add root folder", "Path can not be empty");
|
||||||
|
|
||||||
//Don't let a user add a rootDir that is the same as their SABnzbd TV Directory
|
//Don't let a user add a rootDir that is the same as their SABnzbd TV Directory
|
||||||
if (path.Equals(_configProvider.SabDropDirectory, StringComparison.InvariantCultureIgnoreCase))
|
if (path.Equals(_configProvider.SabDropDirectory, StringComparison.InvariantCultureIgnoreCase))
|
||||||
return new JsonResult { Data = "failed" };
|
NotificationResult.Error("Can't add root folder", "Path can not be same as sab folder.");
|
||||||
|
|
||||||
try
|
_rootFolderProvider.Add(new RootDir { Path = path });
|
||||||
{
|
|
||||||
_rootFolderProvider.Add(new RootDir { Path = path });
|
|
||||||
|
|
||||||
}
|
return NotificationResult.Info("Root Folder saved", "Root foler saved successfully.");
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Logger.Debug("Failed to save Root Dir");
|
|
||||||
Logger.DebugException(ex.Message, ex);
|
|
||||||
|
|
||||||
return new JsonResult { Data = "failed" };
|
|
||||||
}
|
|
||||||
|
|
||||||
return new JsonResult { Data = "ok" };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
|
|
24
NzbDrone.Web/Filters/JsonErrorFilter.cs
Normal file
24
NzbDrone.Web/Filters/JsonErrorFilter.cs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
using System.Linq;
|
||||||
|
using System.Web.Mvc;
|
||||||
|
using NzbDrone.Web.Models;
|
||||||
|
|
||||||
|
namespace NzbDrone.Web.Filters
|
||||||
|
{
|
||||||
|
public class JsonErrorFilter : FilterAttribute, IExceptionFilter
|
||||||
|
{
|
||||||
|
private readonly string _errorTitle;
|
||||||
|
|
||||||
|
public JsonErrorFilter(string errorTitle)
|
||||||
|
{
|
||||||
|
_errorTitle = errorTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnException(ExceptionContext filterContext)
|
||||||
|
{
|
||||||
|
filterContext.Result = NotificationResult.Error(_errorTitle, filterContext.Exception.Message);
|
||||||
|
filterContext.ExceptionHandled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System.Web.Mvc;
|
||||||
|
|
||||||
namespace NzbDrone.Web.Models
|
namespace NzbDrone.Web.Models
|
||||||
{
|
{
|
||||||
public class NotificationResult
|
public class NotificationResult
|
||||||
|
@ -7,13 +9,31 @@ namespace NzbDrone.Web.Models
|
||||||
Text = string.Empty;
|
Text = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsMessage { get { return true; } }
|
|
||||||
|
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public string Text { get; set; }
|
public string Text { get; set; }
|
||||||
public NotificationType NotificationType { get; set; }
|
public NotificationType NotificationType { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public static JsonResult Info(string title, string text)
|
||||||
|
{
|
||||||
|
return GetJsonResult(NotificationType.Error, title, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JsonResult Error(string title, string text)
|
||||||
|
{
|
||||||
|
return GetJsonResult(NotificationType.Error, title, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JsonResult GetJsonResult(NotificationType notificationType, string title, string text)
|
||||||
|
{
|
||||||
|
return new JsonResult
|
||||||
|
{
|
||||||
|
Data = new NotificationResult { NotificationType = notificationType, Title = title, Text = text },
|
||||||
|
ContentType = null,
|
||||||
|
ContentEncoding = null,
|
||||||
|
JsonRequestBehavior = JsonRequestBehavior.AllowGet
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum NotificationType
|
public enum NotificationType
|
||||||
|
|
|
@ -199,6 +199,7 @@
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="App_Start\EntityFramework.SqlServerCompact.cs" />
|
<Compile Include="App_Start\EntityFramework.SqlServerCompact.cs" />
|
||||||
<Compile Include="App_Start\MiniProfiler.cs" />
|
<Compile Include="App_Start\MiniProfiler.cs" />
|
||||||
|
<Compile Include="Filters\JsonErrorFilter.cs" />
|
||||||
<Compile Include="Controllers\CommandController.cs" />
|
<Compile Include="Controllers\CommandController.cs" />
|
||||||
<Compile Include="Controllers\DirectoryController.cs" />
|
<Compile Include="Controllers\DirectoryController.cs" />
|
||||||
<Compile Include="Controllers\EpisodeController.cs" />
|
<Compile Include="Controllers\EpisodeController.cs" />
|
||||||
|
|
|
@ -12,25 +12,24 @@
|
||||||
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
|
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
|
||||||
|
|
||||||
jqXHR.success(function (data) {
|
jqXHR.success(function (data) {
|
||||||
//Check if the response is a message type,
|
if (data.NotificationType === 0) {
|
||||||
if (data.IsMessage) {
|
$.gritter.add({
|
||||||
if (data.NotificationType === 0) {
|
title: data.Title,
|
||||||
$.gritter.add({
|
text: data.Text,
|
||||||
title: data.Title,
|
image: '../../content/images/success.png',
|
||||||
text: data.Text,
|
class_name: 'gritter-success'
|
||||||
image: '../../content/images/success.png',
|
});
|
||||||
class_name: 'gritter-success'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$.gritter.add({
|
|
||||||
title: data.Title,
|
|
||||||
text: data.Text,
|
|
||||||
image: '../../content/images/error.png',
|
|
||||||
class_name: 'gritter-fail'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else if (data.NotificationType === 1) {
|
||||||
|
$.gritter.add({
|
||||||
|
title: data.Title,
|
||||||
|
text: data.Text,
|
||||||
|
image: '../../content/images/error.png',
|
||||||
|
class_name: 'gritter-fail',
|
||||||
|
time: 10000
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
jqXHR.error(function (xhr, ajaxOptions, thrownError) {
|
jqXHR.error(function (xhr, ajaxOptions, thrownError) {
|
||||||
|
@ -40,7 +39,8 @@
|
||||||
title: 'Request failed',
|
title: 'Request failed',
|
||||||
text: this.url,
|
text: this.url,
|
||||||
image: '../../content/images/error.png',
|
image: '../../content/images/error.png',
|
||||||
class_name: 'gritter-fail'
|
class_name: 'gritter-fail',
|
||||||
|
time: 10000
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue