diff --git a/PlexRequests.Api.Models/Sonarr/SonarrAddSeries.cs b/PlexRequests.Api.Models/Sonarr/SonarrAddSeries.cs index 23540521f..6d143fc55 100644 --- a/PlexRequests.Api.Models/Sonarr/SonarrAddSeries.cs +++ b/PlexRequests.Api.Models/Sonarr/SonarrAddSeries.cs @@ -26,7 +26,7 @@ namespace PlexRequests.Api.Models.Sonarr public string titleSlug { get; set; } public int id { get; set; } [JsonIgnore] - public string ErrorMessage { get; set; } + public List ErrorMessages { get; set; } } public class AddOptions diff --git a/PlexRequests.Api.Models/Sonarr/SonarrError.cs b/PlexRequests.Api.Models/Sonarr/SonarrError.cs index ae3fbdfca..c02b3db76 100644 --- a/PlexRequests.Api.Models/Sonarr/SonarrError.cs +++ b/PlexRequests.Api.Models/Sonarr/SonarrError.cs @@ -24,13 +24,22 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // ************************************************************************/ #endregion + +using System.Collections.Generic; +using Newtonsoft.Json; + namespace PlexRequests.Api.Models.Sonarr { public class SonarrError { public string propertyName { get; set; } public string errorMessage { get; set; } - public string attemptedValue { get; set; } - public string[] formattedMessageArguments { get; set; } + public object attemptedValue { get; set; } + public FormattedMessagePlaceholderValues formattedMessagePlaceholderValues { get; set; } + } + public class FormattedMessagePlaceholderValues + { + public string propertyName { get; set; } + public object propertyValue { get; set; } } } \ No newline at end of file diff --git a/PlexRequests.Api/SonarrApi.cs b/PlexRequests.Api/SonarrApi.cs index f9d68da31..76fd2cbb6 100644 --- a/PlexRequests.Api/SonarrApi.cs +++ b/PlexRequests.Api/SonarrApi.cs @@ -104,8 +104,8 @@ namespace PlexRequests.Api catch (JsonSerializationException jse) { Log.Error(jse); - var error = Api.ExecuteJson(request, baseUrl); - result = new SonarrAddSeries { ErrorMessage = error.errorMessage }; + var error = Api.ExecuteJson>(request, baseUrl); + result = new SonarrAddSeries { ErrorMessages = error.Select(x => x.errorMessage).ToList() }; } return result; diff --git a/PlexRequests.UI/Helpers/ValidationHelper.cs b/PlexRequests.UI/Helpers/ValidationHelper.cs index ff50a6b95..d66aa6aef 100644 --- a/PlexRequests.UI/Helpers/ValidationHelper.cs +++ b/PlexRequests.UI/Helpers/ValidationHelper.cs @@ -24,8 +24,10 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // ************************************************************************/ #endregion -using System.Linq; +using System.Collections.Generic; +using System.Linq; +using System.Text; using Nancy.Validation; @@ -55,5 +57,31 @@ namespace PlexRequests.UI.Helpers }) .FirstOrDefault(); } + + public static JsonResponseModel SendSonarrError(List result) + { + var model = new JsonResponseModel {Result = false}; + if (!result.Any()) + { + return model; + } + var sb = new StringBuilder(); + sb.AppendLine("Errors from Sonarr: "); + for (var i = 0; i < result.Count; i++) + { + if (i != result.Count - 1) + { + sb.AppendLine(result[i] + ","); + } + else + { + sb.AppendLine(result[i]); + } + } + + model.Message = sb.ToString(); + + return model; + } } } \ No newline at end of file diff --git a/PlexRequests.UI/Modules/ApplicationTesterModule.cs b/PlexRequests.UI/Modules/ApplicationTesterModule.cs index 929949bd2..000a54d80 100644 --- a/PlexRequests.UI/Modules/ApplicationTesterModule.cs +++ b/PlexRequests.UI/Modules/ApplicationTesterModule.cs @@ -100,7 +100,7 @@ namespace PlexRequests.UI.Modules try { var status = SonarrApi.SystemStatus(sonarrSettings.ApiKey, sonarrSettings.FullUri); - return status != null + return status?.version != null ? Response.AsJson(new JsonResponseModel { Result = true, Message = "Connected to Sonarr successfully!" }) : Response.AsJson(new JsonResponseModel { Result = false, Message = "Could not connect to Sonarr, please check your settings." }); diff --git a/PlexRequests.UI/Modules/ApprovalModule.cs b/PlexRequests.UI/Modules/ApprovalModule.cs index d5871481f..352c479dd 100644 --- a/PlexRequests.UI/Modules/ApprovalModule.cs +++ b/PlexRequests.UI/Modules/ApprovalModule.cs @@ -133,15 +133,17 @@ namespace PlexRequests.UI.Modules Log.Trace("Approval result: {0}", requestResult); if (requestResult) { - return Response.AsJson(new JsonResponseModel { Result = true }); + return Response.AsJson(new JsonResponseModel {Result = true}); } - return Response.AsJson(new JsonResponseModel { Result = false, Message = "Updated Sonarr but could not approve it in PlexRequests :(" }); + return + Response.AsJson(new JsonResponseModel + { + Result = false, + Message = "Updated Sonarr but could not approve it in PlexRequests :(" + }); } - return Response.AsJson(new JsonResponseModel - { - Result = false, - Message = result.ErrorMessage ?? "Could not add the series to Sonarr" - }); + return Response.AsJson(ValidationHelper.SendSonarrError(result.ErrorMessages)); + } var srSettings = SickRageSettings.GetSettings(); @@ -384,7 +386,7 @@ namespace PlexRequests.UI.Modules else { Log.Error("Could not approve and send the TV {0} to Sonarr!", r.Title); - Log.Error("Error message: {0}", res?.ErrorMessage); + res?.ErrorMessages.ForEach(x => Log.Error("Error messages: {0}", x)); } } } diff --git a/PlexRequests.UI/Modules/SearchModule.cs b/PlexRequests.UI/Modules/SearchModule.cs index 5b541091c..2b810c92f 100644 --- a/PlexRequests.UI/Modules/SearchModule.cs +++ b/PlexRequests.UI/Modules/SearchModule.cs @@ -442,7 +442,7 @@ namespace PlexRequests.UI.Modules } - return Response.AsJson(new JsonResponseModel { Result = false, Message = result?.ErrorMessage ?? "Something went wrong adding the movie to Sonarr! Please check your settings." }); + return Response.AsJson(ValidationHelper.SendSonarrError(result?.ErrorMessages)); }