From ebeedb90affd4ceb06b1b5db9f2c8cd8803c78bc Mon Sep 17 00:00:00 2001 From: tidusjar Date: Tue, 31 May 2016 14:09:27 +0100 Subject: [PATCH] More work on #273 --- PlexRequests.Core/Models/IssuesModel.cs | 6 ++- PlexRequests.Store/RequestedModel.cs | 3 +- PlexRequests.UI/Modules/IssuesModule.cs | 60 +++++++++++++++++++-- PlexRequests.UI/Modules/SearchModule.cs | 10 +++- PlexRequests.UI/Views/Requests/Index.cshtml | 6 +-- 5 files changed, 76 insertions(+), 9 deletions(-) diff --git a/PlexRequests.Core/Models/IssuesModel.cs b/PlexRequests.Core/Models/IssuesModel.cs index 0a7a537e8..d616f8d96 100644 --- a/PlexRequests.Core/Models/IssuesModel.cs +++ b/PlexRequests.Core/Models/IssuesModel.cs @@ -32,8 +32,12 @@ namespace PlexRequests.Core.Models { public class IssuesModel : Entity { + public IssuesModel() + { + Issues = new List(); + } public string Title { get; set; } - public string PosterUrl1 { get; set; } + public string PosterUrl { get; set; } public int RequestId { get; set; } public List Issues { get; set; } public bool Deleted { get; set; } diff --git a/PlexRequests.Store/RequestedModel.cs b/PlexRequests.Store/RequestedModel.cs index e8fc41e08..a7fe7e0af 100644 --- a/PlexRequests.Store/RequestedModel.cs +++ b/PlexRequests.Store/RequestedModel.cs @@ -40,6 +40,7 @@ namespace PlexRequests.Store public List RequestedUsers { get; set; } public string ArtistName { get; set; } public string ArtistId { get; set; } + public int IssueId { get; set; } [JsonIgnore] public List AllUsers @@ -83,6 +84,6 @@ namespace PlexRequests.Store NoSubtitles = 1, WrongContent = 2, PlaybackIssues = 3, - Other = 4 // Provide a message + Other = 4, // Provide a message } } diff --git a/PlexRequests.UI/Modules/IssuesModule.cs b/PlexRequests.UI/Modules/IssuesModule.cs index 7b81494c0..a5433ac00 100644 --- a/PlexRequests.UI/Modules/IssuesModule.cs +++ b/PlexRequests.UI/Modules/IssuesModule.cs @@ -5,24 +5,32 @@ using Nancy; using Nancy.Responses.Negotiation; using PlexRequests.Core; +using PlexRequests.Core.Models; using PlexRequests.Core.SettingModels; +using PlexRequests.Store; +using PlexRequests.UI.Models; namespace PlexRequests.UI.Modules { public class IssuesModule : BaseAuthModule { - public IssuesModule(ISettingsService pr, IIssueService issueService) : base("issues", pr) + public IssuesModule(ISettingsService pr, IIssueService issueService, IRequestService request) : base("issues", pr) { IssuesService = issueService; + RequestService = request; Get["/"] = x => Index(); Get["/issuecount", true] = async (x, ct) => await IssueCount(); Get["/details/{id}", true] = async (x, ct) => await Details(x.id); + + Post["/issue", true] = async (x, ct) => await ReportIssue((int)Request.Form.requestId, (IssueState)(int)Request.Form.issue, null); + Post["/issuecomment", true] = async (x, ct) => await ReportIssue((int)Request.Form.requestId, IssueState.Other, (string)Request.Form.commentArea); } private IIssueService IssuesService { get; } + private IRequestService RequestService { get; } public Negotiator Index() { @@ -41,11 +49,57 @@ namespace PlexRequests.UI.Modules { var issue = await IssuesService.GetAsync(id); - return issue == null - ? Index() + return issue == null + ? Index() : View["Details", issue]; } + private async Task ReportIssue(int requestId, IssueState issue, string comment) + { + + var model = new IssueModel + { + Issue = issue, + IssueStatus = IssueStatus.PendingIssue, + UserReported = Username, + UserNote = !string.IsNullOrEmpty(comment) + ? $"{Username} - {comment}" + : string.Empty, + }; + + var request = await RequestService.GetAsync(requestId); + + var issueEntity = await IssuesService.GetAllAsync(); + var existingIssue = issueEntity.FirstOrDefault(x => x.RequestId == requestId); + + // An issue already exists + if (existingIssue != null) + { + existingIssue.Issues.Add(model); + var result = await IssuesService.UpdateIssueAsync(existingIssue); + return Response.AsJson(result + ? new JsonResponseModel { Result = true } + : new JsonResponseModel { Result = false }); + } + + // New issue + var issues = new IssuesModel + { + Title = request.Title, + PosterUrl = request.PosterPath, + RequestId = requestId, + Type = request.Type + }; + issues.Issues.Add(model); + + var issueId = await IssuesService.AddIssueAsync(issues); + + request.IssueId = issueId; + await RequestService.UpdateRequestAsync(request); + + + return Response.AsJson(new JsonResponseModel { Result = true }); + } } } diff --git a/PlexRequests.UI/Modules/SearchModule.cs b/PlexRequests.UI/Modules/SearchModule.cs index 42d17dabc..d91327229 100644 --- a/PlexRequests.UI/Modules/SearchModule.cs +++ b/PlexRequests.UI/Modules/SearchModule.cs @@ -49,7 +49,10 @@ using PlexRequests.UI.Models; using System.Threading.Tasks; using Nancy.Extensions; +using Nancy.Responses; + using PlexRequests.Api.Models.Tv; +using PlexRequests.Core.Models; using PlexRequests.Store.Models; using PlexRequests.Store.Repository; @@ -65,7 +68,8 @@ namespace PlexRequests.UI.Modules ISettingsService sickRageService, ICouchPotatoApi cpApi, ISickRageApi srApi, INotificationService notify, IMusicBrainzApi mbApi, IHeadphonesApi hpApi, ISettingsService hpService, ICouchPotatoCacher cpCacher, ISonarrCacher sonarrCacher, ISickRageCacher sickRageCacher, IPlexApi plexApi, - ISettingsService plexService, ISettingsService auth, IRepository u, ISettingsService email) : base("search", prSettings) + ISettingsService plexService, ISettingsService auth, IRepository u, ISettingsService email, + IIssueService issue) : base("search", prSettings) { Auth = auth; PlexService = plexService; @@ -90,6 +94,7 @@ namespace PlexRequests.UI.Modules HeadphonesService = hpService; UsersToNotifyRepo = u; EmailNotificationSettings = email; + IssueService = issue; Get["/", true] = async (x, ct) => await RequestLoad(); @@ -134,6 +139,7 @@ namespace PlexRequests.UI.Modules private IMusicBrainzApi MusicBrainzApi { get; } private IHeadphonesApi HeadphonesApi { get; } private IRepository UsersToNotifyRepo { get; } + private IIssueService IssueService { get; } private static Logger Log = LogManager.GetCurrentClassLogger(); private async Task RequestLoad() @@ -968,5 +974,7 @@ namespace PlexRequests.UI.Modules var model = seasons.Select(x => x.number); return Response.AsJson(model); } + + } } diff --git a/PlexRequests.UI/Views/Requests/Index.cshtml b/PlexRequests.UI/Views/Requests/Index.cshtml index 03722c18b..424a13c39 100644 --- a/PlexRequests.UI/Views/Requests/Index.cshtml +++ b/PlexRequests.UI/Views/Requests/Index.cshtml @@ -235,7 +235,7 @@ {{/if_eq}} -
+ - +