mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-11 15:56:05 -07:00
More work on #273
This commit is contained in:
parent
1d3520ce93
commit
ebeedb90af
5 changed files with 76 additions and 9 deletions
|
@ -32,8 +32,12 @@ namespace PlexRequests.Core.Models
|
||||||
{
|
{
|
||||||
public class IssuesModel : Entity
|
public class IssuesModel : Entity
|
||||||
{
|
{
|
||||||
|
public IssuesModel()
|
||||||
|
{
|
||||||
|
Issues = new List<IssueModel>();
|
||||||
|
}
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public string PosterUrl1 { get; set; }
|
public string PosterUrl { get; set; }
|
||||||
public int RequestId { get; set; }
|
public int RequestId { get; set; }
|
||||||
public List<IssueModel> Issues { get; set; }
|
public List<IssueModel> Issues { get; set; }
|
||||||
public bool Deleted { get; set; }
|
public bool Deleted { get; set; }
|
||||||
|
|
|
@ -40,6 +40,7 @@ namespace PlexRequests.Store
|
||||||
public List<string> RequestedUsers { get; set; }
|
public List<string> RequestedUsers { get; set; }
|
||||||
public string ArtistName { get; set; }
|
public string ArtistName { get; set; }
|
||||||
public string ArtistId { get; set; }
|
public string ArtistId { get; set; }
|
||||||
|
public int IssueId { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<string> AllUsers
|
public List<string> AllUsers
|
||||||
|
@ -83,6 +84,6 @@ namespace PlexRequests.Store
|
||||||
NoSubtitles = 1,
|
NoSubtitles = 1,
|
||||||
WrongContent = 2,
|
WrongContent = 2,
|
||||||
PlaybackIssues = 3,
|
PlaybackIssues = 3,
|
||||||
Other = 4 // Provide a message
|
Other = 4, // Provide a message
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,24 +5,32 @@ using Nancy;
|
||||||
using Nancy.Responses.Negotiation;
|
using Nancy.Responses.Negotiation;
|
||||||
|
|
||||||
using PlexRequests.Core;
|
using PlexRequests.Core;
|
||||||
|
using PlexRequests.Core.Models;
|
||||||
using PlexRequests.Core.SettingModels;
|
using PlexRequests.Core.SettingModels;
|
||||||
|
using PlexRequests.Store;
|
||||||
|
using PlexRequests.UI.Models;
|
||||||
|
|
||||||
namespace PlexRequests.UI.Modules
|
namespace PlexRequests.UI.Modules
|
||||||
{
|
{
|
||||||
public class IssuesModule : BaseAuthModule
|
public class IssuesModule : BaseAuthModule
|
||||||
{
|
{
|
||||||
public IssuesModule(ISettingsService<PlexRequestSettings> pr, IIssueService issueService) : base("issues", pr)
|
public IssuesModule(ISettingsService<PlexRequestSettings> pr, IIssueService issueService, IRequestService request) : base("issues", pr)
|
||||||
{
|
{
|
||||||
IssuesService = issueService;
|
IssuesService = issueService;
|
||||||
|
RequestService = request;
|
||||||
|
|
||||||
Get["/"] = x => Index();
|
Get["/"] = x => Index();
|
||||||
|
|
||||||
Get["/issuecount", true] = async (x, ct) => await IssueCount();
|
Get["/issuecount", true] = async (x, ct) => await IssueCount();
|
||||||
|
|
||||||
Get["/details/{id}", true] = async (x, ct) => await Details(x.id);
|
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 IIssueService IssuesService { get; }
|
||||||
|
private IRequestService RequestService { get; }
|
||||||
|
|
||||||
public Negotiator Index()
|
public Negotiator Index()
|
||||||
{
|
{
|
||||||
|
@ -46,6 +54,52 @@ namespace PlexRequests.UI.Modules
|
||||||
: View["Details", issue];
|
: View["Details", issue];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<Response> 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 });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,10 @@ using PlexRequests.UI.Models;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using Nancy.Extensions;
|
using Nancy.Extensions;
|
||||||
|
using Nancy.Responses;
|
||||||
|
|
||||||
using PlexRequests.Api.Models.Tv;
|
using PlexRequests.Api.Models.Tv;
|
||||||
|
using PlexRequests.Core.Models;
|
||||||
using PlexRequests.Store.Models;
|
using PlexRequests.Store.Models;
|
||||||
using PlexRequests.Store.Repository;
|
using PlexRequests.Store.Repository;
|
||||||
|
|
||||||
|
@ -65,7 +68,8 @@ namespace PlexRequests.UI.Modules
|
||||||
ISettingsService<SickRageSettings> sickRageService, ICouchPotatoApi cpApi, ISickRageApi srApi,
|
ISettingsService<SickRageSettings> sickRageService, ICouchPotatoApi cpApi, ISickRageApi srApi,
|
||||||
INotificationService notify, IMusicBrainzApi mbApi, IHeadphonesApi hpApi, ISettingsService<HeadphonesSettings> hpService,
|
INotificationService notify, IMusicBrainzApi mbApi, IHeadphonesApi hpApi, ISettingsService<HeadphonesSettings> hpService,
|
||||||
ICouchPotatoCacher cpCacher, ISonarrCacher sonarrCacher, ISickRageCacher sickRageCacher, IPlexApi plexApi,
|
ICouchPotatoCacher cpCacher, ISonarrCacher sonarrCacher, ISickRageCacher sickRageCacher, IPlexApi plexApi,
|
||||||
ISettingsService<PlexSettings> plexService, ISettingsService<AuthenticationSettings> auth, IRepository<UsersToNotify> u, ISettingsService<EmailNotificationSettings> email) : base("search", prSettings)
|
ISettingsService<PlexSettings> plexService, ISettingsService<AuthenticationSettings> auth, IRepository<UsersToNotify> u, ISettingsService<EmailNotificationSettings> email,
|
||||||
|
IIssueService issue) : base("search", prSettings)
|
||||||
{
|
{
|
||||||
Auth = auth;
|
Auth = auth;
|
||||||
PlexService = plexService;
|
PlexService = plexService;
|
||||||
|
@ -90,6 +94,7 @@ namespace PlexRequests.UI.Modules
|
||||||
HeadphonesService = hpService;
|
HeadphonesService = hpService;
|
||||||
UsersToNotifyRepo = u;
|
UsersToNotifyRepo = u;
|
||||||
EmailNotificationSettings = email;
|
EmailNotificationSettings = email;
|
||||||
|
IssueService = issue;
|
||||||
|
|
||||||
|
|
||||||
Get["/", true] = async (x, ct) => await RequestLoad();
|
Get["/", true] = async (x, ct) => await RequestLoad();
|
||||||
|
@ -134,6 +139,7 @@ namespace PlexRequests.UI.Modules
|
||||||
private IMusicBrainzApi MusicBrainzApi { get; }
|
private IMusicBrainzApi MusicBrainzApi { get; }
|
||||||
private IHeadphonesApi HeadphonesApi { get; }
|
private IHeadphonesApi HeadphonesApi { get; }
|
||||||
private IRepository<UsersToNotify> UsersToNotifyRepo { get; }
|
private IRepository<UsersToNotify> UsersToNotifyRepo { get; }
|
||||||
|
private IIssueService IssueService { get; }
|
||||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
private async Task<Negotiator> RequestLoad()
|
private async Task<Negotiator> RequestLoad()
|
||||||
|
@ -968,5 +974,7 @@ namespace PlexRequests.UI.Modules
|
||||||
var model = seasons.Select(x => x.number);
|
var model = seasons.Select(x => x.number);
|
||||||
return Response.AsJson(model);
|
return Response.AsJson(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -235,7 +235,7 @@
|
||||||
|
|
||||||
{{/if_eq}}
|
{{/if_eq}}
|
||||||
|
|
||||||
<form method="POST" action="@formAction/requests/reportissue/" id="report{{requestId}}">
|
<form method="POST" action="@formAction/issues/issue/" id="report{{requestId}}">
|
||||||
<input name="requestId" type="text" value="{{requestId}}" hidden="hidden" />
|
<input name="requestId" type="text" value="{{requestId}}" hidden="hidden" />
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button id="{{requestId}}" class="btn btn-sm btn-primary-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
<button id="{{requestId}}" class="btn btn-sm btn-primary-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||||
|
@ -348,7 +348,7 @@
|
||||||
|
|
||||||
{{/if_eq}}
|
{{/if_eq}}
|
||||||
|
|
||||||
<form method="POST" action="@formAction/requests/reportissue/" id="report{{requestId}}">
|
<form method="POST" action="@formAction/issues/issue/" id="report{{requestId}}">
|
||||||
<input name="requestId" type="text" value="{{requestId}}" hidden="hidden" />
|
<input name="requestId" type="text" value="{{requestId}}" hidden="hidden" />
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button id="{{requestId}}" class="btn btn-sm btn-primary-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
<button id="{{requestId}}" class="btn btn-sm btn-primary-outline dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
||||||
|
@ -382,7 +382,7 @@
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-times"></i></button>
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-times"></i></button>
|
||||||
<h4 class="modal-title">Add issue/comment</h4>
|
<h4 class="modal-title">Add issue/comment</h4>
|
||||||
</div>
|
</div>
|
||||||
<form method="POST" action="@formAction/requests/reportissuecomment" id="commentForm">
|
<form method="POST" action="@formAction/issues/issuecomment" id="commentForm">
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<input name="requestId" class="requestId" type="text" hidden="hidden" value="" />
|
<input name="requestId" class="requestId" type="text" hidden="hidden" value="" />
|
||||||
<textarea class="form-control form-control-custom" rows="3" id="commentArea" name="commentArea"></textarea>
|
<textarea class="form-control form-control-custom" rows="3" id="commentArea" name="commentArea"></textarea>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue