diff --git a/PlexRequests.UI/Content/requests.js b/PlexRequests.UI/Content/requests.js index 032da43b1..611d89fba 100644 --- a/PlexRequests.UI/Content/requests.js +++ b/PlexRequests.UI/Content/requests.js @@ -6,11 +6,12 @@ }); var searchSource = $("#search-template").html(); +var albumSource = $("#album-template").html(); var searchTemplate = Handlebars.compile(searchSource); +var albumTemplate = Handlebars.compile(albumSource); var movieTimer = 0; var tvimer = 0; -var noResultsHtml = "
" + - "
Sorry, there are no {0} requests yet!
"; + var mixItUpDefault = { animation: { enable: true }, load: { @@ -86,7 +87,7 @@ $('#approveMovies').click(function (e) { generateNotify("Something went wrong!", "danger"); }, complete: function (e) { - finishLoading(buttonId, "success", origHtml) + finishLoading(buttonId, "success", origHtml); } }); }); @@ -116,7 +117,7 @@ $('#approveTVShows').click(function (e) { generateNotify("Something went wrong!", "danger"); }, complete: function (e) { - finishLoading(buttonId, "success", origHtml) + finishLoading(buttonId, "success", origHtml); } }); }); @@ -384,6 +385,8 @@ function mixItUpConfig(activeState) { function initLoad() { movieLoad(); tvLoad(); + albumLoad(); + //noResultsMusic } function movieLoad() { @@ -432,6 +435,29 @@ function tvLoad() { }); }; +function albumLoad() { + var $albumL = $('#MusicList'); + if ($albumL.mixItUp('isLoaded')) { + activeState = $albumL.mixItUp('getState'); + $albumL.mixItUp('destroy'); + } + $albumL.html(""); + + $.ajax("/requests/albums/").success(function (results) { + if (results.length > 0) { + results.forEach(function (result) { + var context = buildRequestContext(result, "album"); + var html = searchTemplate(context); + $albumL.append(html); + }); + } + else { + $albumL.html(noResultsMusic.format("albums")); + } + $albumL.mixItUp(mixItUpConfig()); + }); +}; + // Builds the request context. function buildRequestContext(result, type) { var context = { @@ -455,8 +481,11 @@ function buildRequestContext(result, type) { requestId: result.id, adminNote: result.adminNotes, imdb: result.imdbId, - seriesRequested: result.tvSeriesRequestType + seriesRequested: result.tvSeriesRequestType, + coverArtUrl: result.coverArtUrl, + }; return context; -} \ No newline at end of file +} + diff --git a/PlexRequests.UI/Content/search.js b/PlexRequests.UI/Content/search.js index 126d65634..1c2daa06d 100644 --- a/PlexRequests.UI/Content/search.js +++ b/PlexRequests.UI/Content/search.js @@ -9,10 +9,7 @@ var searchSource = $("#search-template").html(); var musicSource = $("#music-template").html(); var searchTemplate = Handlebars.compile(searchSource); var musicTemplate = Handlebars.compile(musicSource); -var noResultsHtml = "
" + - "
Sorry, we didn't find any results!
"; -var noResultsMusic = "
" + - "
Sorry, we didn't find any results!
"; + var searchTimer = 0; // Type in movie search diff --git a/PlexRequests.UI/Content/site.js b/PlexRequests.UI/Content/site.js index 698178126..72ec831fa 100644 --- a/PlexRequests.UI/Content/site.js +++ b/PlexRequests.UI/Content/site.js @@ -44,4 +44,9 @@ function finishLoading(elementId, originalCss, html) { $('#' + elementId).removeClass("btn-primary-outline"); $('#' + elementId).addClass("btn-" + originalCss + "-outline"); $('#' + elementId).html(html); -} \ No newline at end of file +} + +var noResultsHtml = "
" + + "
Sorry, we didn't find any results!
"; +var noResultsMusic = "
" + + "
Sorry, we didn't find any results!
"; \ No newline at end of file diff --git a/PlexRequests.UI/Models/RequestViewModel.cs b/PlexRequests.UI/Models/RequestViewModel.cs index 292bc39df..575681007 100644 --- a/PlexRequests.UI/Models/RequestViewModel.cs +++ b/PlexRequests.UI/Models/RequestViewModel.cs @@ -51,5 +51,6 @@ namespace PlexRequests.UI.Models public string OtherMessage { get; set; } public string AdminNotes { get; set; } public string TvSeriesRequestType { get; set; } + public string MusicBrainzId { get; set; } } } diff --git a/PlexRequests.UI/Modules/RequestsModule.cs b/PlexRequests.UI/Modules/RequestsModule.cs index 2d12ab4a1..7d7d7b8ad 100644 --- a/PlexRequests.UI/Modules/RequestsModule.cs +++ b/PlexRequests.UI/Modules/RequestsModule.cs @@ -56,6 +56,7 @@ namespace PlexRequests.UI.Modules Get["/"] = _ => LoadRequests(); Get["/movies"] = _ => GetMovies(); Get["/tvshows"] = _ => GetTvShows(); + Get["/albums"] = _ => GetAlbumRequests(); Post["/delete"] = _ => DeleteRequest((int)Request.Form.id); Post["/reportissue"] = _ => ReportIssue((int)Request.Form.requestId, (IssueState)(int)Request.Form.issue, null); Post["/reportissuecomment"] = _ => ReportIssue((int)Request.Form.requestId, IssueState.Other, (string)Request.Form.commentArea); @@ -156,6 +157,47 @@ namespace PlexRequests.UI.Modules return Response.AsJson(viewModel); } + private Response GetAlbumRequests() + { + var settings = PrSettings.GetSettings(); + var isAdmin = Context.CurrentUser.IsAuthenticated(); + var dbAlbum = Service.GetAll().Where(x => x.Type == RequestType.Album); + if (settings.UsersCanViewOnlyOwnRequests && !isAdmin) + { + dbAlbum = dbAlbum.Where(x => x.UserHasRequested(Username)); + } + + var viewModel = dbAlbum.Select(album => { + return new RequestViewModel + { + ProviderId = album.ProviderId, + Type = album.Type, + Status = album.Status, + ImdbId = album.ImdbId, + Id = album.Id, + PosterPath = album.PosterPath, + ReleaseDate = album.ReleaseDate.Humanize(), + ReleaseDateTicks = album.ReleaseDate.Ticks, + RequestedDate = DateTimeHelper.OffsetUTCDateTime(album.RequestedDate, DateTimeOffset).Humanize(), + RequestedDateTicks = DateTimeHelper.OffsetUTCDateTime(album.RequestedDate, DateTimeOffset).Ticks, + Approved = album.Available || album.Approved, + Title = album.Title, + Overview = album.Overview, + RequestedUsers = isAdmin ? album.AllUsers.ToArray() : new string[] { }, + ReleaseYear = album.ReleaseDate.Year.ToString(), + Available = album.Available, + Admin = isAdmin, + Issues = album.Issues.Humanize(LetterCasing.Title), + OtherMessage = album.OtherMessage, + AdminNotes = album.AdminNote, + TvSeriesRequestType = album.SeasonsRequested, + MusicBrainzId = album.MusicBrainzId + }; + }).ToList(); + + return Response.AsJson(viewModel); + } + private Response DeleteRequest(int requestid) { if (!Context.CurrentUser.IsAuthenticated()) diff --git a/PlexRequests.UI/Modules/SearchModule.cs b/PlexRequests.UI/Modules/SearchModule.cs index ee4f518f5..77783a7ba 100644 --- a/PlexRequests.UI/Modules/SearchModule.cs +++ b/PlexRequests.UI/Modules/SearchModule.cs @@ -512,7 +512,8 @@ namespace PlexRequests.UI.Modules Type = RequestType.Album, ProviderId = 0, RequestedUsers = new List() { Username }, - Status = albumInfo.status + Status = albumInfo.status, + Issues = IssueState.None }; diff --git a/PlexRequests.UI/Views/Requests/Index.cshtml b/PlexRequests.UI/Views/Requests/Index.cshtml index 5f47fe7fb..e2b3d9bd6 100644 --- a/PlexRequests.UI/Views/Requests/Index.cshtml +++ b/PlexRequests.UI/Views/Requests/Index.cshtml @@ -16,7 +16,7 @@ } @if (Model.SearchForMusic) { -
  • Music
  • +
  • Albums
  • }
    @@ -233,6 +233,119 @@ + +