mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-12 16:22:55 -07:00
only show requested by users to admins + start maintaining a list of users with each request
This commit is contained in:
parent
5a5512a1cd
commit
b8a01b62b9
8 changed files with 54 additions and 20 deletions
|
@ -33,7 +33,7 @@ namespace PlexRequests.Core
|
||||||
public interface IRequestService
|
public interface IRequestService
|
||||||
{
|
{
|
||||||
long AddRequest(RequestedModel model);
|
long AddRequest(RequestedModel model);
|
||||||
bool CheckRequest(int providerId);
|
RequestedModel CheckRequest(int providerId);
|
||||||
void DeleteRequest(RequestedModel request);
|
void DeleteRequest(RequestedModel request);
|
||||||
bool UpdateRequest(RequestedModel model);
|
bool UpdateRequest(RequestedModel model);
|
||||||
RequestedModel Get(int id);
|
RequestedModel Get(int id);
|
||||||
|
|
|
@ -58,10 +58,11 @@ namespace PlexRequests.Core
|
||||||
return result ? id : -1;
|
return result ? id : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CheckRequest(int providerId)
|
public RequestedModel CheckRequest(int providerId)
|
||||||
{
|
{
|
||||||
var blobs = Repo.GetAll();
|
var blobs = Repo.GetAll();
|
||||||
return blobs.Any(x => x.ProviderId == providerId);
|
var blob = blobs.FirstOrDefault(x => x.ProviderId == providerId);
|
||||||
|
return blob != null ? ByteConverterHelper.ReturnObject<RequestedModel>(blob.Content) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteRequest(RequestedModel request)
|
public void DeleteRequest(RequestedModel request)
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
|
|
||||||
using Dapper.Contrib.Extensions;
|
using Dapper.Contrib.Extensions;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace PlexRequests.Store
|
namespace PlexRequests.Store
|
||||||
{
|
{
|
||||||
|
@ -18,7 +20,10 @@ namespace PlexRequests.Store
|
||||||
public RequestType Type { get; set; }
|
public RequestType Type { get; set; }
|
||||||
public string Status { get; set; }
|
public string Status { get; set; }
|
||||||
public bool Approved { get; set; }
|
public bool Approved { get; set; }
|
||||||
|
|
||||||
|
[Obsolete("Use RequestedUsers")]
|
||||||
public string RequestedBy { get; set; }
|
public string RequestedBy { get; set; }
|
||||||
|
|
||||||
public DateTime RequestedDate { get; set; }
|
public DateTime RequestedDate { get; set; }
|
||||||
public bool Available { get; set; }
|
public bool Available { get; set; }
|
||||||
public IssueState Issues { get; set; }
|
public IssueState Issues { get; set; }
|
||||||
|
@ -27,6 +32,17 @@ namespace PlexRequests.Store
|
||||||
public int[] SeasonList { get; set; }
|
public int[] SeasonList { get; set; }
|
||||||
public int SeasonCount { get; set; }
|
public int SeasonCount { get; set; }
|
||||||
public string SeasonsRequested { get; set; }
|
public string SeasonsRequested { get; set; }
|
||||||
|
public List<string> RequestedUsers { get; set; }
|
||||||
|
|
||||||
|
public bool UserHasRequested(string username)
|
||||||
|
{
|
||||||
|
bool alreadyRequested = !string.IsNullOrEmpty(RequestedBy) && RequestedBy.Equals(username, StringComparison.OrdinalIgnoreCase);
|
||||||
|
if (!alreadyRequested && RequestedUsers != null && RequestedUsers.Count > 0)
|
||||||
|
{
|
||||||
|
alreadyRequested = RequestedUsers.Any(x => x.Equals(username, StringComparison.OrdinalIgnoreCase));
|
||||||
|
}
|
||||||
|
return alreadyRequested;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum RequestType
|
public enum RequestType
|
||||||
|
|
|
@ -433,7 +433,7 @@ function buildRequestContext(result, type) {
|
||||||
releaseDate: result.releaseDate,
|
releaseDate: result.releaseDate,
|
||||||
releaseDateTicks: result.releaseDateTicks,
|
releaseDateTicks: result.releaseDateTicks,
|
||||||
approved: result.approved,
|
approved: result.approved,
|
||||||
requestedBy: result.requestedBy,
|
requestedUsers: result.requestedUsers ? result.requestedUsers.join(', ') : '',
|
||||||
requestedDate: result.requestedDate,
|
requestedDate: result.requestedDate,
|
||||||
requestedDateTicks: result.requestedDateTicks,
|
requestedDateTicks: result.requestedDateTicks,
|
||||||
available: result.available,
|
available: result.available,
|
||||||
|
|
|
@ -41,7 +41,7 @@ namespace PlexRequests.UI.Models
|
||||||
public RequestType Type { get; set; }
|
public RequestType Type { get; set; }
|
||||||
public string Status { get; set; }
|
public string Status { get; set; }
|
||||||
public bool Approved { get; set; }
|
public bool Approved { get; set; }
|
||||||
public string RequestedBy { get; set; }
|
public string[] RequestedUsers { get; set; }
|
||||||
public string RequestedDate { get; set; }
|
public string RequestedDate { get; set; }
|
||||||
public long RequestedDateTicks { get; set; }
|
public long RequestedDateTicks { get; set; }
|
||||||
public string ReleaseYear { get; set; }
|
public string ReleaseYear { get; set; }
|
||||||
|
|
|
@ -84,7 +84,7 @@ namespace PlexRequests.UI.Modules
|
||||||
var dbMovies = Service.GetAll().Where(x => x.Type == RequestType.Movie);
|
var dbMovies = Service.GetAll().Where(x => x.Type == RequestType.Movie);
|
||||||
if (settings.UsersCanViewOnlyOwnRequests && !isAdmin)
|
if (settings.UsersCanViewOnlyOwnRequests && !isAdmin)
|
||||||
{
|
{
|
||||||
dbMovies = dbMovies.Where(x => x.RequestedBy.Equals(Session[SessionKeys.UsernameKey].ToString(), StringComparison.OrdinalIgnoreCase));
|
dbMovies = dbMovies.Where(x => x.UserHasRequested(Session[SessionKeys.UsernameKey].ToString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
var viewModel = dbMovies.Select(movie => new RequestViewModel
|
var viewModel = dbMovies.Select(movie => new RequestViewModel
|
||||||
|
@ -102,7 +102,7 @@ namespace PlexRequests.UI.Modules
|
||||||
Approved = movie.Available || movie.Approved,
|
Approved = movie.Available || movie.Approved,
|
||||||
Title = movie.Title,
|
Title = movie.Title,
|
||||||
Overview = movie.Overview,
|
Overview = movie.Overview,
|
||||||
RequestedBy = movie.RequestedBy,
|
RequestedUsers = isAdmin ? movie.RequestedUsers.ToArray() : new string[] { },
|
||||||
ReleaseYear = movie.ReleaseDate.Year.ToString(),
|
ReleaseYear = movie.ReleaseDate.Year.ToString(),
|
||||||
Available = movie.Available,
|
Available = movie.Available,
|
||||||
Admin = isAdmin,
|
Admin = isAdmin,
|
||||||
|
@ -121,7 +121,7 @@ namespace PlexRequests.UI.Modules
|
||||||
var dbTv = Service.GetAll().Where(x => x.Type == RequestType.TvShow);
|
var dbTv = Service.GetAll().Where(x => x.Type == RequestType.TvShow);
|
||||||
if (settings.UsersCanViewOnlyOwnRequests && !isAdmin)
|
if (settings.UsersCanViewOnlyOwnRequests && !isAdmin)
|
||||||
{
|
{
|
||||||
dbTv = dbTv.Where(x => x.RequestedBy.Equals(Session[SessionKeys.UsernameKey].ToString(), StringComparison.OrdinalIgnoreCase));
|
dbTv = dbTv.Where(x => x.UserHasRequested(Session[SessionKeys.UsernameKey].ToString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
var viewModel = dbTv.Select(tv => new RequestViewModel
|
var viewModel = dbTv.Select(tv => new RequestViewModel
|
||||||
|
@ -139,7 +139,7 @@ namespace PlexRequests.UI.Modules
|
||||||
Approved = tv.Available || tv.Approved,
|
Approved = tv.Available || tv.Approved,
|
||||||
Title = tv.Title,
|
Title = tv.Title,
|
||||||
Overview = tv.Overview,
|
Overview = tv.Overview,
|
||||||
RequestedBy = tv.RequestedBy,
|
RequestedUsers = isAdmin ? tv.RequestedUsers.ToArray() : new string[] { },
|
||||||
ReleaseYear = tv.ReleaseDate.Year.ToString(),
|
ReleaseYear = tv.ReleaseDate.Year.ToString(),
|
||||||
Available = tv.Available,
|
Available = tv.Available,
|
||||||
Admin = isAdmin,
|
Admin = isAdmin,
|
||||||
|
|
|
@ -179,11 +179,20 @@ namespace PlexRequests.UI.Modules
|
||||||
Log.Trace(movieInfo.DumpJson);
|
Log.Trace(movieInfo.DumpJson);
|
||||||
//#if !DEBUG
|
//#if !DEBUG
|
||||||
|
|
||||||
|
var settings = PrService.GetSettings();
|
||||||
|
|
||||||
|
// check if the movie has already been requested
|
||||||
Log.Info("Requesting movie with id {0}", movieId);
|
Log.Info("Requesting movie with id {0}", movieId);
|
||||||
if (RequestService.CheckRequest(movieId))
|
var existingRequest = RequestService.CheckRequest(movieId);
|
||||||
|
if (existingRequest != null)
|
||||||
{
|
{
|
||||||
Log.Trace("movie with id {0} exists", movieId);
|
// check if the current user is already marked as a requester for this movie, if not, add them
|
||||||
return Response.AsJson(new JsonResponseModel { Result = false, Message = $"{fullMovieName} has already been requested!" });
|
if (!existingRequest.UserHasRequested(Session[SessionKeys.UsernameKey].ToString()))
|
||||||
|
{
|
||||||
|
existingRequest.RequestedUsers.Add(Session[SessionKeys.UsernameKey].ToString());
|
||||||
|
RequestService.UpdateRequest(existingRequest);
|
||||||
|
}
|
||||||
|
return Response.AsJson(new JsonResponseModel { Result = false, Message = settings.UsersCanViewOnlyOwnRequests ? $"{fullMovieName} was successfully added!" : $"{fullMovieName} has already been requested!" });
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.Debug("movie with id {0} doesnt exists", movieId);
|
Log.Debug("movie with id {0} doesnt exists", movieId);
|
||||||
|
@ -213,12 +222,10 @@ namespace PlexRequests.UI.Modules
|
||||||
Status = movieInfo.Status,
|
Status = movieInfo.Status,
|
||||||
RequestedDate = DateTime.Now,
|
RequestedDate = DateTime.Now,
|
||||||
Approved = false,
|
Approved = false,
|
||||||
RequestedBy = Session[SessionKeys.UsernameKey].ToString(),
|
RequestedUsers = new List<string>() { Session[SessionKeys.UsernameKey].ToString() },
|
||||||
Issues = IssueState.None,
|
Issues = IssueState.None,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
var settings = PrService.GetSettings();
|
|
||||||
Log.Trace(settings.DumpJson());
|
Log.Trace(settings.DumpJson());
|
||||||
if (!settings.RequireMovieApproval || settings.NoApprovalUserList.Any(x => x.Equals(Session[SessionKeys.UsernameKey].ToString(), StringComparison.OrdinalIgnoreCase)))
|
if (!settings.RequireMovieApproval || settings.NoApprovalUserList.Any(x => x.Equals(Session[SessionKeys.UsernameKey].ToString(), StringComparison.OrdinalIgnoreCase)))
|
||||||
{
|
{
|
||||||
|
@ -310,9 +317,20 @@ namespace PlexRequests.UI.Modules
|
||||||
string fullShowName = $"{showInfo.name} ({firstAir.Year})";
|
string fullShowName = $"{showInfo.name} ({firstAir.Year})";
|
||||||
//#if !DEBUG
|
//#if !DEBUG
|
||||||
|
|
||||||
if (RequestService.CheckRequest(showId))
|
var settings = PrService.GetSettings();
|
||||||
|
|
||||||
|
// check if the show has already been requested
|
||||||
|
Log.Info("Requesting tv show with id {0}", showId);
|
||||||
|
var existingRequest = RequestService.CheckRequest(showId);
|
||||||
|
if (existingRequest != null)
|
||||||
{
|
{
|
||||||
return Response.AsJson(new JsonResponseModel { Result = false, Message = $"{fullShowName} has already been requested!" });
|
// check if the current user is already marked as a requester for this show, if not, add them
|
||||||
|
if (!existingRequest.UserHasRequested(Session[SessionKeys.UsernameKey].ToString()))
|
||||||
|
{
|
||||||
|
existingRequest.RequestedUsers.Add(Session[SessionKeys.UsernameKey].ToString());
|
||||||
|
RequestService.UpdateRequest(existingRequest);
|
||||||
|
}
|
||||||
|
return Response.AsJson(new JsonResponseModel { Result = false, Message = settings.UsersCanViewOnlyOwnRequests ? $"{fullShowName} was successfully added!" : $"{fullShowName} has already been requested!" });
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -340,7 +358,7 @@ namespace PlexRequests.UI.Modules
|
||||||
Status = showInfo.status,
|
Status = showInfo.status,
|
||||||
RequestedDate = DateTime.Now,
|
RequestedDate = DateTime.Now,
|
||||||
Approved = false,
|
Approved = false,
|
||||||
RequestedBy = Session[SessionKeys.UsernameKey].ToString(),
|
RequestedUsers = new List<string>() { Session[SessionKeys.UsernameKey].ToString() },
|
||||||
Issues = IssueState.None,
|
Issues = IssueState.None,
|
||||||
ImdbId = showInfo.externals?.imdb ?? string.Empty,
|
ImdbId = showInfo.externals?.imdb ?? string.Empty,
|
||||||
SeasonCount = showInfo.seasonCount
|
SeasonCount = showInfo.seasonCount
|
||||||
|
@ -363,7 +381,6 @@ namespace PlexRequests.UI.Modules
|
||||||
|
|
||||||
model.SeasonList = seasonsList.ToArray();
|
model.SeasonList = seasonsList.ToArray();
|
||||||
|
|
||||||
var settings = PrService.GetSettings();
|
|
||||||
if (!settings.RequireTvShowApproval || settings.NoApprovalUserList.Any(x => x.Equals(Session[SessionKeys.UsernameKey].ToString(), StringComparison.OrdinalIgnoreCase)))
|
if (!settings.RequireTvShowApproval || settings.NoApprovalUserList.Any(x => x.Equals(Session[SessionKeys.UsernameKey].ToString(), StringComparison.OrdinalIgnoreCase)))
|
||||||
{
|
{
|
||||||
var sonarrSettings = SonarrService.GetSettings();
|
var sonarrSettings = SonarrService.GetSettings();
|
||||||
|
|
|
@ -140,7 +140,7 @@
|
||||||
{{#if_eq type "tv"}}
|
{{#if_eq type "tv"}}
|
||||||
<div>Series Requested: {{seriesRequested}}</div>
|
<div>Series Requested: {{seriesRequested}}</div>
|
||||||
{{/if_eq}}
|
{{/if_eq}}
|
||||||
<div>Requested By: {{requestedBy}}</div>
|
<div>Requested By: {{requestedUsers}}</div>
|
||||||
<div>Requested Date: {{requestedDate}}</div>
|
<div>Requested Date: {{requestedDate}}</div>
|
||||||
<div id="issueArea{{requestId}}">
|
<div id="issueArea{{requestId}}">
|
||||||
{{#if otherMessage}}
|
{{#if otherMessage}}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue