Got the search finished up for #32

pull/130/head
tidusjar 9 years ago
parent 420e43dfaf
commit e037ad0f2b

@ -34,6 +34,8 @@ namespace PlexRequests.Core
{ {
long AddRequest(RequestedModel model); long AddRequest(RequestedModel model);
RequestedModel CheckRequest(int providerId); RequestedModel CheckRequest(int providerId);
RequestedModel CheckRequest(string musicId);
void DeleteRequest(RequestedModel request); void DeleteRequest(RequestedModel request);
bool UpdateRequest(RequestedModel model); bool UpdateRequest(RequestedModel model);
RequestedModel Get(int id); RequestedModel Get(int id);

@ -65,6 +65,13 @@ namespace PlexRequests.Core
return blob != null ? ByteConverterHelper.ReturnObject<RequestedModel>(blob.Content) : null; return blob != null ? ByteConverterHelper.ReturnObject<RequestedModel>(blob.Content) : null;
} }
public RequestedModel CheckRequest(string musicId)
{
var blobs = Repo.GetAll();
var blob = blobs.FirstOrDefault(x => x.MusicId == musicId);
return blob != null ? ByteConverterHelper.ReturnObject<RequestedModel>(blob.Content) : null;
}
public void DeleteRequest(RequestedModel request) public void DeleteRequest(RequestedModel request)
{ {
var blob = Repo.Get(request.Id); var blob = Repo.Get(request.Id);

@ -36,7 +36,7 @@ namespace PlexRequests.Core.SettingModels
public bool Enabled { get; set; } public bool Enabled { get; set; }
public string Ip { get; set; } public string Ip { get; set; }
public int Port { get; set; } public int Port { get; set; }
public int ApiKey { get; set; } public string ApiKey { get; set; }
public bool Ssl { get; set; } public bool Ssl { get; set; }
public string SubDir { get; set; } public string SubDir { get; set; }

@ -45,7 +45,7 @@ namespace PlexRequests.Core.SettingModels
public string NoApprovalUsers { get; set; } public string NoApprovalUsers { get; set; }
[JsonIgnore] [JsonIgnore]
public List<string> NoApprovalUserList public List<string> ApprovalWhiteList
{ {
get get
{ {

@ -37,13 +37,11 @@ namespace PlexRequests.Store.Repository
public class RequestJsonRepository : IRequestRepository public class RequestJsonRepository : IRequestRepository
{ {
private ICacheProvider Cache { get; } private ICacheProvider Cache { get; }
private string TypeName { get; }
public RequestJsonRepository(ISqliteConfiguration config, ICacheProvider cacheProvider) public RequestJsonRepository(ISqliteConfiguration config, ICacheProvider cacheProvider)
{ {
Db = config; Db = config;
Cache = cacheProvider; Cache = cacheProvider;
TypeName = typeof(RequestJsonRepository).Name;
} }
private ISqliteConfiguration Db { get; } private ISqliteConfiguration Db { get; }
@ -60,7 +58,7 @@ namespace PlexRequests.Store.Repository
public IEnumerable<RequestBlobs> GetAll() public IEnumerable<RequestBlobs> GetAll()
{ {
var key = TypeName + "GetAll"; var key = "GetAll";
var item = Cache.GetOrSet(key, () => var item = Cache.GetOrSet(key, () =>
{ {
using (var con = Db.DbConnection()) using (var con = Db.DbConnection())
@ -74,7 +72,7 @@ namespace PlexRequests.Store.Repository
public RequestBlobs Get(int id) public RequestBlobs Get(int id)
{ {
var key = TypeName + "Get" + id; var key = "Get" + id;
var item = Cache.GetOrSet(key, () => var item = Cache.GetOrSet(key, () =>
{ {
using (var con = Db.DbConnection()) using (var con = Db.DbConnection())
@ -107,7 +105,7 @@ namespace PlexRequests.Store.Repository
private void ResetCache() private void ResetCache()
{ {
Cache.Remove("Get"); Cache.Remove("Get");
Cache.Remove(TypeName + "GetAll"); Cache.Remove("GetAll");
} }
public bool UpdateAll(IEnumerable<RequestBlobs> entity) public bool UpdateAll(IEnumerable<RequestBlobs> entity)

@ -107,6 +107,28 @@ $(document).on("click", ".requestMovie", function (e) {
}); });
// Click Request for album
$(document).on("click", ".requestAlbum", function (e) {
e.preventDefault();
var buttonId = e.target.id;
if ($("#" + buttonId).attr('disabled')) {
return;
}
$("#" + buttonId).prop("disabled", true);
loadingButton(buttonId, "primary");
var $form = $('#form' + buttonId);
var type = $form.prop('method');
var url = $form.prop('action');
var data = $form.serialize();
sendRequestAjax(data, type, url, buttonId);
});
function sendRequestAjax(data, type, url, buttonId) { function sendRequestAjax(data, type, url, buttonId) {
$.ajax({ $.ajax({
type: type, type: type,

@ -86,7 +86,7 @@ namespace PlexRequests.UI.Modules
Post["request/movie"] = parameters => RequestMovie((int)Request.Form.movieId); Post["request/movie"] = parameters => RequestMovie((int)Request.Form.movieId);
Post["request/tv"] = parameters => RequestTvShow((int)Request.Form.tvId, (string)Request.Form.seasons); Post["request/tv"] = parameters => RequestTvShow((int)Request.Form.tvId, (string)Request.Form.seasons);
Post["request/album"] = parameters => RequestTvShow((int)Request.Form.tvId, (string)Request.Form.seasons); Post["request/album"] = parameters => RequestAlbum((string)Request.Form.albumId);
} }
private TheMovieDbApi MovieApi { get; } private TheMovieDbApi MovieApi { get; }
private INotificationService NotificationService { get; } private INotificationService NotificationService { get; }
@ -261,7 +261,7 @@ namespace PlexRequests.UI.Modules
}; };
Log.Trace(settings.DumpJson()); Log.Trace(settings.DumpJson());
if (!settings.RequireMovieApproval || settings.NoApprovalUserList.Any(x => x.Equals(Username, StringComparison.OrdinalIgnoreCase))) if (!settings.RequireMovieApproval || settings.ApprovalWhiteList.Any(x => x.Equals(Username, StringComparison.OrdinalIgnoreCase)))
{ {
var cpSettings = CpService.GetSettings(); var cpSettings = CpService.GetSettings();
@ -288,7 +288,7 @@ namespace PlexRequests.UI.Modules
}; };
NotificationService.Publish(notificationModel); NotificationService.Publish(notificationModel);
return Response.AsJson(new JsonResponseModel {Result = true, Message = $"{fullMovieName} was successfully added!" }); return Response.AsJson(new JsonResponseModel { Result = true, Message = $"{fullMovieName} was successfully added!" });
} }
return return
Response.AsJson(new JsonResponseModel Response.AsJson(new JsonResponseModel
@ -380,7 +380,7 @@ namespace PlexRequests.UI.Modules
} }
//#endif //#endif
var model = new RequestedModel var model = new RequestedModel
{ {
ProviderId = showInfo.externals?.thetvdb ?? 0, ProviderId = showInfo.externals?.thetvdb ?? 0,
@ -415,7 +415,7 @@ namespace PlexRequests.UI.Modules
model.SeasonList = seasonsList.ToArray(); model.SeasonList = seasonsList.ToArray();
if (!settings.RequireTvShowApproval || settings.NoApprovalUserList.Any(x => x.Equals(Username, StringComparison.OrdinalIgnoreCase))) if (!settings.RequireTvShowApproval || settings.ApprovalWhiteList.Any(x => x.Equals(Username, StringComparison.OrdinalIgnoreCase)))
{ {
var sonarrSettings = SonarrService.GetSettings(); var sonarrSettings = SonarrService.GetSettings();
var sender = new TvSender(SonarrApi, SickrageApi); var sender = new TvSender(SonarrApi, SickrageApi);
@ -476,10 +476,33 @@ namespace PlexRequests.UI.Modules
private Response RequestAlbum(string releaseId) private Response RequestAlbum(string releaseId)
{ {
var settings = HeadphonesService.GetSettings(); var settings = PrService.GetSettings();
var existingRequest = RequestService.CheckRequest(releaseId);
Log.Debug("Checking for an existing request");
if (existingRequest != null)
{
Log.Debug("We do have an existing album request");
if (!existingRequest.UserHasRequested(Username))
{
Log.Debug("Not in the requested list so adding them and updating the request. User: {0}", Username);
existingRequest.RequestedUsers.Add(Username);
RequestService.UpdateRequest(existingRequest);
}
return Response.AsJson(new JsonResponseModel { Result = true, Message = settings.UsersCanViewOnlyOwnRequests ? $"{existingRequest.Title} was successfully added!" : $"{existingRequest.Title} has already been requested!" });
}
Log.Debug("This is a new request");
var albumInfo = MusicBrainzApi.GetAlbum(releaseId); var albumInfo = MusicBrainzApi.GetAlbum(releaseId);
var img = GetMusicBrainzCoverArt(albumInfo.id); var img = GetMusicBrainzCoverArt(albumInfo.id);
Log.Trace("Album Details:");
Log.Trace(albumInfo.DumpJson());
Log.Trace("CoverArt Details:");
Log.Trace(img.DumpJson());
var model = new RequestedModel var model = new RequestedModel
{ {
Title = albumInfo.title, Title = albumInfo.title,
@ -487,11 +510,59 @@ namespace PlexRequests.UI.Modules
Overview = albumInfo.disambiguation, Overview = albumInfo.disambiguation,
PosterPath = img, PosterPath = img,
Type = RequestType.Album, Type = RequestType.Album,
ProviderId = 0,
RequestedUsers = new List<string>() { Username },
Status = albumInfo.status
}; };
// TODO need to send to Headphones
return Response.AsJson("");
if (!settings.RequireMusicApproval ||
settings.ApprovalWhiteList.Any(x => x.Equals(Username, StringComparison.OrdinalIgnoreCase)))
{
Log.Debug("We don't require approval OR the user is in the whitelist");
var hpSettings = HeadphonesService.GetSettings();
Log.Trace("Headphone Settings:");
Log.Trace(hpSettings.DumpJson());
if (!hpSettings.Enabled)
{
RequestService.AddRequest(model);
return
Response.AsJson(new JsonResponseModel
{
Result = true,
Message = $"{model.Title} was successfully added!"
});
}
var headphonesResult = HeadphonesApi.AddAlbum(hpSettings.ApiKey, hpSettings.FullUri, model.MusicBrainzId);
Log.Info("Result from adding album to Headphones = {0}", headphonesResult);
RequestService.AddRequest(model);
if (headphonesResult)
{
return
Response.AsJson(new JsonResponseModel
{
Result = true,
Message = $"{model.Title} was successfully added!"
});
}
return
Response.AsJson(new JsonResponseModel
{
Result = false,
Message = $"There was a problem adding {model.Title}. Please contact your admin!"
});
}
var result = RequestService.AddRequest(model);
return Response.AsJson(new JsonResponseModel
{
Result = true,
Message = $"{model.Title} was successfully added!"
});
} }
private string GetMusicBrainzCoverArt(string id) private string GetMusicBrainzCoverArt(string id)

@ -182,7 +182,7 @@
<form method="POST" action="/search/request/{{type}}" id="form{{id}}"> <form method="POST" action="/search/request/{{type}}" id="form{{id}}">
<input name="{{type}}Id" type="text" value="{{id}}" hidden="hidden" /> <input name="{{type}}Id" type="text" value="{{id}}" hidden="hidden" />
<button id="{{id}}" style="text-align: right" class="btn btn-primary-outline requestMusic" type="submit"><i class="fa fa-plus"></i> Request</button> <button id="{{id}}" style="text-align: right" class="btn btn-primary-outline requestAlbum" type="submit"><i class="fa fa-plus"></i> Request</button>
<br /> <br />
<small class="row">Track Count: {{trackCount}}</small> <small class="row">Track Count: {{trackCount}}</small>
<small class="row">Country: {{country}}</small> <small class="row">Country: {{country}}</small>

Loading…
Cancel
Save