From 386f856ea7f58e542f176e283b4450a3a7a8a033 Mon Sep 17 00:00:00 2001 From: tidusjar Date: Mon, 26 Jun 2017 22:30:33 +0100 Subject: [PATCH] Fixed a load of bugs need to figure out what is wrong with tv requests #865 --- src/Ombi.Core/Engine/TvRequestEngine.cs | 16 ++++++++----- src/Ombi.Core/Engine/TvSearchEngine.cs | 23 +++++++++++-------- .../Rule/Rules/Search/ExistingRequestRule.cs | 20 ++++++++-------- .../Requests/TvRequestRepository.cs | 13 +++++++---- src/Ombi/Auth/TokenProviderMiddleware.cs | 11 ++++++++- .../ClientApp/app/services/request.service.ts | 3 ++- src/Ombi/Controllers/RequestController.cs | 12 +++++++++- 7 files changed, 66 insertions(+), 32 deletions(-) diff --git a/src/Ombi.Core/Engine/TvRequestEngine.cs b/src/Ombi.Core/Engine/TvRequestEngine.cs index 37cdc1da9..11695fac1 100644 --- a/src/Ombi.Core/Engine/TvRequestEngine.cs +++ b/src/Ombi.Core/Engine/TvRequestEngine.cs @@ -81,6 +81,7 @@ namespace Ombi.Core.Engine RequestedDate = DateTime.UtcNow, Approved = false, RequestedUserId = user.Id, + SeasonRequests = new List() }; if (tv.LatestSeason) @@ -112,13 +113,16 @@ namespace Ombi.Core.Engine var episodesRequests = new List(); foreach (var ep in episodes) { - episodesRequests.Add(new EpisodeRequests + if (ep.season == first.season) { - EpisodeNumber = ep.number, - AirDate = DateTime.Parse(ep.airdate), - Title = ep.name, - Url = ep.url - }); + episodesRequests.Add(new EpisodeRequests + { + EpisodeNumber = ep.number, + AirDate = DateTime.Parse(ep.airdate), + Title = ep.name, + Url = ep.url + }); + } } childRequest.SeasonRequests.Add(new SeasonRequests { diff --git a/src/Ombi.Core/Engine/TvSearchEngine.cs b/src/Ombi.Core/Engine/TvSearchEngine.cs index de1ad2576..9cc4b7707 100644 --- a/src/Ombi.Core/Engine/TvSearchEngine.cs +++ b/src/Ombi.Core/Engine/TvSearchEngine.cs @@ -77,15 +77,16 @@ namespace Ombi.Core.Engine }); mapped.SeasonRequests.Add(newSeason); } - else - { - // Find the episode - var ep = season.Episodes.FirstOrDefault(x => x.EpisodeNumber == e.number); - ep.Url = e.url; - ep.Title = e.name; - ep.AirDate = DateTime.Parse(e.airstamp); - ep.EpisodeNumber = e.number; - } + //else + //{ + // // Find the episode + // var ep = episodes.FirstOrDefault(x => x.number == e.number); + + // ep.Url = e.url; + // ep.Title = e.name; + // ep.AirDate = DateTime.Parse(e.airstamp); + // ep.EpisodeNumber = e.number; + //} } var existingRequests = await GetTvRequests(); @@ -180,6 +181,10 @@ namespace Ombi.Core.Engine { // Find the episode from what we are searching var episodeSearching = season.Episodes.FirstOrDefault(x => x.EpisodeNumber == ep.EpisodeNumber); + if(episodeSearching == null) + { + continue; + } episodeSearching.Requested = true; episodeSearching.Available = ep.Available; episodeSearching.Approved = ep.Season.ChildRequest.Approved; diff --git a/src/Ombi.Core/Rule/Rules/Search/ExistingRequestRule.cs b/src/Ombi.Core/Rule/Rules/Search/ExistingRequestRule.cs index 83856335f..6064568bb 100644 --- a/src/Ombi.Core/Rule/Rules/Search/ExistingRequestRule.cs +++ b/src/Ombi.Core/Rule/Rules/Search/ExistingRequestRule.cs @@ -7,24 +7,26 @@ using Ombi.Core.Models.Requests.Tv; using Ombi.Core.Models.Search; using Ombi.Core.Requests.Models; using Ombi.Core.Rule.Interfaces; +using Ombi.Store.Repository; +using Ombi.Store.Repository.Requests; namespace Ombi.Core.Rule.Rules.Search { public class ExistingRequestRule : BaseSearchRule, IRequestRules { - public ExistingRequestRule(IRequestService movie, IRequestService tv) + public ExistingRequestRule(IMovieRequestRepository movie, ITvRequestRepository tv) { Movie = movie; Tv = tv; } - private IRequestService Movie { get; } - private IRequestService Tv { get; } + private IMovieRequestRepository Movie { get; } + private ITvRequestRepository Tv { get; } public async Task Execute(SearchViewModel obj) { - var movieRequests = await Movie.GetAllAsync(); - var existing = movieRequests.FirstOrDefault(x => x.ProviderId == obj.Id); + var movieRequests = Movie.Get(); + var existing = await movieRequests.FirstOrDefaultAsync(x => x.TheMovieDbId == obj.Id); if (existing != null) // Do we already have a request for this? { @@ -35,14 +37,14 @@ namespace Ombi.Core.Rule.Rules.Search return Success(); } - var tvRequests = await Tv.GetAllAsync(); - var tv = tvRequests.FirstOrDefault(x => x.ProviderId == obj.Id); + var tvRequests = Tv.Get(); + var tv = await tvRequests.FirstOrDefaultAsync(x => x.TvDbId == obj.Id); if (tv != null) // Do we already have a request for this? { obj.Requested = true; - obj.Approved = tv.Approved; - obj.Available = tv.Available; + obj.Approved = tv.ChildRequests.Any(x => x.Approved); + obj.Available = tv.ChildRequests.Any(x => x.Available); return Success(); } diff --git a/src/Ombi.Store/Repository/Requests/TvRequestRepository.cs b/src/Ombi.Store/Repository/Requests/TvRequestRepository.cs index 63065a51e..bead9e4cd 100644 --- a/src/Ombi.Store/Repository/Requests/TvRequestRepository.cs +++ b/src/Ombi.Store/Repository/Requests/TvRequestRepository.cs @@ -18,27 +18,30 @@ namespace Ombi.Store.Repository.Requests public async Task GetRequest(int tvDbId) { return await Db.TvRequests.Where(x => x.TvDbId == tvDbId) - .Include(x => x.ChildRequests) - .ThenInclude(x => x.Issues) .Include(x => x.ChildRequests) .ThenInclude(x => x.RequestedUser) + .Include(x => x.ChildRequests) + .ThenInclude(x => x.SeasonRequests) + .ThenInclude(x => x.Episodes) .FirstOrDefaultAsync(); } public IQueryable Get() { return Db.TvRequests - .Include(x => x.ChildRequests) - .ThenInclude(x => x.Issues) .Include(x => x.ChildRequests) .ThenInclude(x => x.RequestedUser) + .Include(x => x.ChildRequests) + .ThenInclude(x => x.SeasonRequests) + .ThenInclude(x => x.Episodes) .AsQueryable(); } public IQueryable GetChild() { return Db.ChildRequests - .Include(x => x.Issues) .Include(x => x.RequestedUser) + .Include(x => x.SeasonRequests) + .ThenInclude(x => x.Episodes) .AsQueryable(); } diff --git a/src/Ombi/Auth/TokenProviderMiddleware.cs b/src/Ombi/Auth/TokenProviderMiddleware.cs index 0681f503b..f928b6049 100644 --- a/src/Ombi/Auth/TokenProviderMiddleware.cs +++ b/src/Ombi/Auth/TokenProviderMiddleware.cs @@ -42,7 +42,16 @@ namespace Ombi.Auth // If the request path doesn't match, skip if (!context.Request.Path.Equals(_options.Path, StringComparison.Ordinal)) { - return _next(context); + try + { + + return _next(context); + } + catch (Exception e) + { + + throw; + } } // Request must be POST with Content-Type: application/json diff --git a/src/Ombi/ClientApp/app/services/request.service.ts b/src/Ombi/ClientApp/app/services/request.service.ts index 697549f0e..0417d1738 100644 --- a/src/Ombi/ClientApp/app/services/request.service.ts +++ b/src/Ombi/ClientApp/app/services/request.service.ts @@ -40,7 +40,8 @@ export class RequestService extends ServiceAuthHelpers { } getTvRequests(count: number, position: number): Observable { - return this.http.get(`${this.url}tv/${count}/${position}`).map(this.extractData); + return this.http.get(`${this.url}tv/${count}/${position}`).map(this.extractData) + .catch(this.handleError); } searchTvRequests(search: string): Observable { diff --git a/src/Ombi/Controllers/RequestController.cs b/src/Ombi/Controllers/RequestController.cs index dbc518488..442ae89e9 100644 --- a/src/Ombi/Controllers/RequestController.cs +++ b/src/Ombi/Controllers/RequestController.cs @@ -7,6 +7,7 @@ using Ombi.Core.Models.Search; using System.Collections.Generic; using System.Threading.Tasks; using Ombi.Store.Entities.Requests; +using System.Diagnostics; namespace Ombi.Controllers { @@ -95,7 +96,16 @@ namespace Ombi.Controllers [HttpGet("tv/{count:int}/{position:int}")] public async Task> GetTvRequests(int count, int position) { - return await TvRequestEngine.GetRequests(count, position); + try + { + + return await TvRequestEngine.GetRequests(count, position); + } + catch (System.Exception e) + { + Debug.WriteLine(e.Message); + throw; + } } ///