mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-15 01:32:55 -07:00
Got the search finished up for #32
This commit is contained in:
parent
420e43dfaf
commit
e037ad0f2b
8 changed files with 118 additions and 18 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue