mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-13 18:16:55 -07:00
Added new Image posters API
This commit is contained in:
parent
5bf8703c66
commit
560454565d
7 changed files with 62 additions and 10 deletions
|
@ -9,6 +9,7 @@ using Ombi.Store.Entities.Requests;
|
||||||
using Ombi.Store.Entities;
|
using Ombi.Store.Entities;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Ombi.Core.Authentication;
|
using Ombi.Core.Authentication;
|
||||||
|
using Ombi.Helpers;
|
||||||
|
|
||||||
namespace Ombi.Core.Engine.Interfaces
|
namespace Ombi.Core.Engine.Interfaces
|
||||||
{
|
{
|
||||||
|
@ -29,6 +30,10 @@ namespace Ombi.Core.Engine.Interfaces
|
||||||
private OmbiUser _user;
|
private OmbiUser _user;
|
||||||
protected async Task<OmbiUser> GetUser()
|
protected async Task<OmbiUser> GetUser()
|
||||||
{
|
{
|
||||||
|
if(!Username.HasValue())
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
var username = Username.ToUpper();
|
var username = Username.ToUpper();
|
||||||
return _user ?? (_user = await UserManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username));
|
return _user ?? (_user = await UserManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username));
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace Ombi.Core.Engine.Interfaces
|
||||||
Task<IEnumerable<SearchMovieViewModel>> NowPlayingMovies(int currentPosition, int amountToLoad);
|
Task<IEnumerable<SearchMovieViewModel>> NowPlayingMovies(int currentPosition, int amountToLoad);
|
||||||
Task<MovieCollectionsViewModel> GetCollection(int collectionId, CancellationToken cancellationToken, string langCode = null);
|
Task<MovieCollectionsViewModel> GetCollection(int collectionId, CancellationToken cancellationToken, string langCode = null);
|
||||||
Task<int> GetTvDbId(int theMovieDbId);
|
Task<int> GetTvDbId(int theMovieDbId);
|
||||||
Task<IEnumerable<SearchMovieViewModel>> PopularMovies(int currentlyLoaded, int toLoad, CancellationToken cancellationToken);
|
Task<IEnumerable<SearchMovieViewModel>> PopularMovies(int currentlyLoaded, int toLoad, CancellationToken cancellationToken, string langCustomCode = null);
|
||||||
Task<IEnumerable<SearchMovieViewModel>> TopRatedMovies(int currentlyLoaded, int toLoad);
|
Task<IEnumerable<SearchMovieViewModel>> TopRatedMovies(int currentlyLoaded, int toLoad);
|
||||||
Task<IEnumerable<SearchMovieViewModel>> UpcomingMovies(int currentlyLoaded, int toLoad);
|
Task<IEnumerable<SearchMovieViewModel>> UpcomingMovies(int currentlyLoaded, int toLoad);
|
||||||
Task<ActorCredits> GetMoviesByActor(int actorId, string langCode);
|
Task<ActorCredits> GetMoviesByActor(int actorId, string langCode);
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace Ombi.Core
|
||||||
Task<SearchFullInfoTvShowViewModel> GetShowInformation(string tvdbid, CancellationToken token);
|
Task<SearchFullInfoTvShowViewModel> GetShowInformation(string tvdbid, CancellationToken token);
|
||||||
Task<SearchFullInfoTvShowViewModel> GetShowByRequest(int requestId, CancellationToken token);
|
Task<SearchFullInfoTvShowViewModel> GetShowByRequest(int requestId, CancellationToken token);
|
||||||
Task<IEnumerable<StreamingData>> GetStreamInformation(int movieDbId, CancellationToken cancellationToken);
|
Task<IEnumerable<StreamingData>> GetStreamInformation(int movieDbId, CancellationToken cancellationToken);
|
||||||
Task<IEnumerable<SearchTvShowViewModel>> Popular(int currentlyLoaded, int amountToLoad);
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,9 +124,9 @@ namespace Ombi.Core.Engine.V2
|
||||||
/// Gets popular movies by paging
|
/// Gets popular movies by paging
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<IEnumerable<SearchMovieViewModel>> PopularMovies(int currentlyLoaded, int toLoad, CancellationToken cancellationToken)
|
public async Task<IEnumerable<SearchMovieViewModel>> PopularMovies(int currentlyLoaded, int toLoad, CancellationToken cancellationToken, string langCustomCode = null)
|
||||||
{
|
{
|
||||||
var langCode = await DefaultLanguageCode(null);
|
var langCode = await DefaultLanguageCode(langCustomCode);
|
||||||
|
|
||||||
var pages = PaginationHelper.GetNextPages(currentlyLoaded, toLoad, _theMovieDbMaxPageItems);
|
var pages = PaginationHelper.GetNextPages(currentlyLoaded, toLoad, _theMovieDbMaxPageItems);
|
||||||
|
|
||||||
|
|
|
@ -107,9 +107,9 @@ namespace Ombi.Core.Engine.V2
|
||||||
return await ProcessResult(mapped);
|
return await ProcessResult(mapped);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> Popular(int currentlyLoaded, int amountToLoad)
|
public async Task<IEnumerable<SearchTvShowViewModel>> Popular(int currentlyLoaded, int amountToLoad, string langCustomCode = null)
|
||||||
{
|
{
|
||||||
var langCode = await DefaultLanguageCode(null);
|
var langCode = await DefaultLanguageCode(langCustomCode);
|
||||||
|
|
||||||
var pages = PaginationHelper.GetNextPages(currentlyLoaded, amountToLoad, ResultLimit);
|
var pages = PaginationHelper.GetNextPages(currentlyLoaded, amountToLoad, ResultLimit);
|
||||||
var results = new List<MovieDbSearchResult>();
|
var results = new List<MovieDbSearchResult>();
|
||||||
|
|
|
@ -58,9 +58,6 @@ namespace Ombi.Core.Models.Search
|
||||||
public bool PartlyAvailable { get; set; }
|
public bool PartlyAvailable { get; set; }
|
||||||
public override RequestType Type => RequestType.TvShow;
|
public override RequestType Type => RequestType.TvShow;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Only set on the images call
|
|
||||||
/// </summary>
|
|
||||||
public string BackdropPath { get; set; }
|
public string BackdropPath { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -6,6 +6,7 @@ using Microsoft.Extensions.Options;
|
||||||
using Ombi.Api.FanartTv;
|
using Ombi.Api.FanartTv;
|
||||||
using Ombi.Config;
|
using Ombi.Config;
|
||||||
using Ombi.Core;
|
using Ombi.Core;
|
||||||
|
using Ombi.Core.Engine.Interfaces;
|
||||||
using Ombi.Helpers;
|
using Ombi.Helpers;
|
||||||
using Ombi.Store.Repository;
|
using Ombi.Store.Repository;
|
||||||
|
|
||||||
|
@ -17,13 +18,16 @@ namespace Ombi.Controllers.V1
|
||||||
public class ImagesController : ControllerBase
|
public class ImagesController : ControllerBase
|
||||||
{
|
{
|
||||||
public ImagesController(IFanartTvApi fanartTvApi, IApplicationConfigRepository config,
|
public ImagesController(IFanartTvApi fanartTvApi, IApplicationConfigRepository config,
|
||||||
IOptions<LandingPageBackground> options, ICacheService c, IImageService imageService)
|
IOptions<LandingPageBackground> options, ICacheService c, IImageService imageService,
|
||||||
|
IMovieEngineV2 movieEngineV2, ITVSearchEngineV2 tVSearchEngineV2)
|
||||||
{
|
{
|
||||||
FanartTvApi = fanartTvApi;
|
FanartTvApi = fanartTvApi;
|
||||||
Config = config;
|
Config = config;
|
||||||
Options = options.Value;
|
Options = options.Value;
|
||||||
_cache = c;
|
_cache = c;
|
||||||
_imageService = imageService;
|
_imageService = imageService;
|
||||||
|
_movieEngineV2 = movieEngineV2;
|
||||||
|
_tvSearchEngineV2 = tVSearchEngineV2;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IFanartTvApi FanartTvApi { get; }
|
private IFanartTvApi FanartTvApi { get; }
|
||||||
|
@ -31,6 +35,8 @@ namespace Ombi.Controllers.V1
|
||||||
private LandingPageBackground Options { get; }
|
private LandingPageBackground Options { get; }
|
||||||
private readonly ICacheService _cache;
|
private readonly ICacheService _cache;
|
||||||
private readonly IImageService _imageService;
|
private readonly IImageService _imageService;
|
||||||
|
private readonly IMovieEngineV2 _movieEngineV2;
|
||||||
|
private readonly ITVSearchEngineV2 _tvSearchEngineV2;
|
||||||
|
|
||||||
[HttpGet("tv/{tvdbid}")]
|
[HttpGet("tv/{tvdbid}")]
|
||||||
public async Task<string> GetTvBanner(int tvdbid)
|
public async Task<string> GetTvBanner(int tvdbid)
|
||||||
|
@ -61,6 +67,50 @@ namespace Ombi.Controllers.V1
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet("poster")]
|
||||||
|
public async Task<string> GetRandomPoster()
|
||||||
|
{
|
||||||
|
var key = await _cache.GetOrAdd(CacheKeys.FanartTv, async () => await Config.GetAsync(Store.Entities.ConfigurationTypes.FanartTv), DateTime.Now.AddDays(1));
|
||||||
|
var rand = new Random();
|
||||||
|
var val = rand.Next(1, 3);
|
||||||
|
if (val == 1)
|
||||||
|
{
|
||||||
|
var movies = (await _movieEngineV2.PopularMovies(0, 10, HttpContext.RequestAborted ,"en")).ToArray();
|
||||||
|
var selectedMovieIndex = rand.Next(movies.Count());
|
||||||
|
var movie = movies[selectedMovieIndex];
|
||||||
|
|
||||||
|
var images = await _cache.GetOrAdd($"{CacheKeys.FanartTv}movie{movie.Id}", async () => await FanartTvApi.GetMovieImages(movie.Id.ToString(), key.Value), DateTime.Now.AddDays(1));
|
||||||
|
if (images == null)
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (images.movieposter?.Any() ?? false)
|
||||||
|
{
|
||||||
|
var enImage = images.movieposter.Where(x => x.lang == "en").OrderByDescending(x => x.likes).Select(x => x.url).FirstOrDefault();
|
||||||
|
if (enImage == null)
|
||||||
|
{
|
||||||
|
return images.movieposter.OrderByDescending(x => x.likes).Select(x => x.url).FirstOrDefault();
|
||||||
|
}
|
||||||
|
return enImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (images.moviethumb?.Any() ?? false)
|
||||||
|
{
|
||||||
|
return images.moviethumb.OrderBy(x => x.likes).Select(x => x.url).FirstOrDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var tv = (await _tvSearchEngineV2.Popular(0, 10, "en")).ToArray();
|
||||||
|
var selectedMovieIndex = rand.Next(tv.Count());
|
||||||
|
var selected = tv[selectedMovieIndex];
|
||||||
|
|
||||||
|
return $"https://image.tmdb.org/t/p/original{selected.BackdropPath}";
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet("poster/movie/{movieDbId}")]
|
[HttpGet("poster/movie/{movieDbId}")]
|
||||||
public async Task<string> GetMoviePoster(string movieDbId)
|
public async Task<string> GetMoviePoster(string movieDbId)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue