mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-29 19:18:30 -07:00
WIP on recently requested
This commit is contained in:
parent
bc59a5051e
commit
d417526b26
6 changed files with 65 additions and 2 deletions
|
@ -14,5 +14,6 @@ namespace Ombi.Core
|
||||||
Task<IEnumerable<SearchTvShowViewModel>> Popular(int currentlyLoaded, int amountToLoad, string langCustomCode = null);
|
Task<IEnumerable<SearchTvShowViewModel>> Popular(int currentlyLoaded, int amountToLoad, string langCustomCode = null);
|
||||||
Task<IEnumerable<SearchTvShowViewModel>> Anticipated(int currentlyLoaded, int amountToLoad);
|
Task<IEnumerable<SearchTvShowViewModel>> Anticipated(int currentlyLoaded, int amountToLoad);
|
||||||
Task<IEnumerable<SearchTvShowViewModel>> Trending(int currentlyLoaded, int amountToLoad);
|
Task<IEnumerable<SearchTvShowViewModel>> Trending(int currentlyLoaded, int amountToLoad);
|
||||||
|
Task<IEnumerable<SearchFullInfoTvShowViewModel>> RecentlyRequestedShows(int currentlyLoaded, int toLoad, CancellationToken cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -200,7 +200,7 @@ namespace Ombi.Core.Engine.V2
|
||||||
var result = await _client.GetAsync("https://raw.githubusercontent.com/Ombi-app/Ombi.News/main/Seasonal.md");
|
var result = await _client.GetAsync("https://raw.githubusercontent.com/Ombi-app/Ombi.News/main/Seasonal.md");
|
||||||
var keyWordIds = await result.Content.ReadAsStringAsync();
|
var keyWordIds = await result.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(keyWordIds))
|
if (string.IsNullOrEmpty(keyWordIds) || keyWordIds.Equals("\n"))
|
||||||
{
|
{
|
||||||
return new List<SearchMovieViewModel>();
|
return new List<SearchMovieViewModel>();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,8 @@ using System.Threading;
|
||||||
using Ombi.Api.TheMovieDb;
|
using Ombi.Api.TheMovieDb;
|
||||||
using Ombi.Api.TheMovieDb.Models;
|
using Ombi.Api.TheMovieDb.Models;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using Ombi.Core.Engine.Interfaces;
|
||||||
|
using Ombi.Core.Models.UI;
|
||||||
|
|
||||||
namespace Ombi.Core.Engine.V2
|
namespace Ombi.Core.Engine.V2
|
||||||
{
|
{
|
||||||
|
@ -33,10 +35,11 @@ namespace Ombi.Core.Engine.V2
|
||||||
private readonly ITraktApi _traktApi;
|
private readonly ITraktApi _traktApi;
|
||||||
private readonly IMovieDbApi _movieApi;
|
private readonly IMovieDbApi _movieApi;
|
||||||
private readonly ISettingsService<CustomizationSettings> _customization;
|
private readonly ISettingsService<CustomizationSettings> _customization;
|
||||||
|
private readonly ITvRequestEngine _requestEngine;
|
||||||
|
|
||||||
public TvSearchEngineV2(IPrincipal identity, IRequestServiceMain service, ITvMazeApi tvMaze, IMapper mapper,
|
public TvSearchEngineV2(IPrincipal identity, IRequestServiceMain service, ITvMazeApi tvMaze, IMapper mapper,
|
||||||
ITraktApi trakt, IRuleEvaluator r, OmbiUserManager um, ICacheService memCache, ISettingsService<OmbiSettings> s,
|
ITraktApi trakt, IRuleEvaluator r, OmbiUserManager um, ICacheService memCache, ISettingsService<OmbiSettings> s,
|
||||||
IRepository<RequestSubscription> sub, IMovieDbApi movieApi, ISettingsService<CustomizationSettings> customization)
|
IRepository<RequestSubscription> sub, IMovieDbApi movieApi, ISettingsService<CustomizationSettings> customization, ITvRequestEngine requestEngine)
|
||||||
: base(identity, service, r, um, memCache, s, sub)
|
: base(identity, service, r, um, memCache, s, sub)
|
||||||
{
|
{
|
||||||
_tvMaze = tvMaze;
|
_tvMaze = tvMaze;
|
||||||
|
@ -44,6 +47,7 @@ namespace Ombi.Core.Engine.V2
|
||||||
_traktApi = trakt;
|
_traktApi = trakt;
|
||||||
_movieApi = movieApi;
|
_movieApi = movieApi;
|
||||||
_customization = customization;
|
_customization = customization;
|
||||||
|
_requestEngine = requestEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -164,6 +168,43 @@ namespace Ombi.Core.Engine.V2
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<IEnumerable<SearchFullInfoTvShowViewModel>> RecentlyRequestedShows(int currentlyLoaded, int toLoad, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var langCode = await DefaultLanguageCode(null);
|
||||||
|
|
||||||
|
var results = new List<SearchFullInfoTvShowViewModel>();
|
||||||
|
|
||||||
|
var requestResult = await Cache.GetOrAdd(nameof(RecentlyRequestedShows) + "Requests" + toLoad + langCode,
|
||||||
|
async () =>
|
||||||
|
{
|
||||||
|
return await _requestEngine.GetRequests(toLoad, currentlyLoaded, new Models.UI.OrderFilterModel
|
||||||
|
{
|
||||||
|
OrderType = OrderType.RequestedDateDesc
|
||||||
|
});
|
||||||
|
}, DateTime.Now.AddMinutes(15), cancellationToken);
|
||||||
|
|
||||||
|
var movieDBResults = await Cache.GetOrAdd(nameof(RecentlyRequestedShows) + toLoad + langCode,
|
||||||
|
async () =>
|
||||||
|
{
|
||||||
|
var responses = new List<TvInfo>();
|
||||||
|
foreach (var movie in requestResult.Collection)
|
||||||
|
{
|
||||||
|
responses.Add(await _movieApi.GetTVInfo(movie.ExternalProviderId.ToString()));
|
||||||
|
}
|
||||||
|
return responses;
|
||||||
|
}, DateTime.Now.AddHours(12), cancellationToken);
|
||||||
|
|
||||||
|
var mapped = _mapper.Map<List<SearchFullInfoTvShowViewModel>>(movieDBResults);
|
||||||
|
|
||||||
|
foreach(var map in mapped)
|
||||||
|
{
|
||||||
|
var processed = await ProcessResult(map);
|
||||||
|
results.Add(processed);
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
private async Task<IEnumerable<SearchTvShowViewModel>> ProcessResults(List<MovieDbSearchResult> items)
|
private async Task<IEnumerable<SearchTvShowViewModel>> ProcessResults(List<MovieDbSearchResult> items)
|
||||||
{
|
{
|
||||||
var retVal = new List<SearchTvShowViewModel>();
|
var retVal = new List<SearchTvShowViewModel>();
|
||||||
|
|
|
@ -223,8 +223,10 @@ export class CarouselListComponent implements OnInit {
|
||||||
break
|
break
|
||||||
case DiscoverType.RecentlyRequested:
|
case DiscoverType.RecentlyRequested:
|
||||||
this.movies = await this.searchService.recentlyRequestedMoviesByPage(this.currentlyLoaded, this.amountToLoad);
|
this.movies = await this.searchService.recentlyRequestedMoviesByPage(this.currentlyLoaded, this.amountToLoad);
|
||||||
|
break;
|
||||||
case DiscoverType.Seasonal:
|
case DiscoverType.Seasonal:
|
||||||
this.movies = await this.searchService.seasonalMoviesByPage(this.currentlyLoaded, this.amountToLoad);
|
this.movies = await this.searchService.seasonalMoviesByPage(this.currentlyLoaded, this.amountToLoad);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
this.movieCount.emit(this.movies.length);
|
this.movieCount.emit(this.movies.length);
|
||||||
this.currentlyLoaded += this.amountToLoad;
|
this.currentlyLoaded += this.amountToLoad;
|
||||||
|
@ -241,6 +243,9 @@ export class CarouselListComponent implements OnInit {
|
||||||
case DiscoverType.Upcoming:
|
case DiscoverType.Upcoming:
|
||||||
this.tvShows = await this.searchService.anticipatedTvByPage(this.currentlyLoaded, this.amountToLoad);
|
this.tvShows = await this.searchService.anticipatedTvByPage(this.currentlyLoaded, this.amountToLoad);
|
||||||
break
|
break
|
||||||
|
case DiscoverType.RecentlyRequested:
|
||||||
|
// this.tvShows = await this.searchService.recentlyRequestedMoviesByPage(this.currentlyLoaded, this.amountToLoad); // TODO need to do some more mapping
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
this.currentlyLoaded += this.amountToLoad;
|
this.currentlyLoaded += this.amountToLoad;
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,10 @@ export class SearchV2Service extends ServiceHelpers {
|
||||||
return this.http.get<ISearchMovieResult[]>(`${this.url}/Movie/requested/${currentlyLoaded}/${toLoad}`).toPromise();
|
return this.http.get<ISearchMovieResult[]>(`${this.url}/Movie/requested/${currentlyLoaded}/${toLoad}`).toPromise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public recentlyRequestedTvByPage(currentlyLoaded: number, toLoad: number): Promise<ISearchTvResultV2[]> {
|
||||||
|
return this.http.get<ISearchTvResultV2[]>(`${this.url}/tv/requested/${currentlyLoaded}/${toLoad}`).toPromise();
|
||||||
|
}
|
||||||
|
|
||||||
public seasonalMoviesByPage(currentlyLoaded: number, toLoad: number): Promise<ISearchMovieResult[]> {
|
public seasonalMoviesByPage(currentlyLoaded: number, toLoad: number): Promise<ISearchMovieResult[]> {
|
||||||
return this.http.get<ISearchMovieResult[]>(`${this.url}/Movie/seasonal/${currentlyLoaded}/${toLoad}`).toPromise();
|
return this.http.get<ISearchMovieResult[]>(`${this.url}/Movie/seasonal/${currentlyLoaded}/${toLoad}`).toPromise();
|
||||||
}
|
}
|
||||||
|
|
|
@ -189,6 +189,18 @@ namespace Ombi.Controllers.V2
|
||||||
{
|
{
|
||||||
return await _movieEngineV2.RecentlyRequestedMovies(currentPosition, amountToLoad, Request.HttpContext.RequestAborted);
|
return await _movieEngineV2.RecentlyRequestedMovies(currentPosition, amountToLoad, Request.HttpContext.RequestAborted);
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Returns Recently Requested Tv using Paging
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>We use TheMovieDb as the Movie Provider</remarks>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("tv/requested/{currentPosition}/{amountToLoad}")]
|
||||||
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[ProducesDefaultResponseType]
|
||||||
|
public async Task<IEnumerable<SearchFullInfoTvShowViewModel>> RecentlyRequestedTv(int currentPosition, int amountToLoad)
|
||||||
|
{
|
||||||
|
return await _tvEngineV2.RecentlyRequestedShows(currentPosition, amountToLoad, Request.HttpContext.RequestAborted);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns Now Playing Movies
|
/// Returns Now Playing Movies
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue