@ -2,6 +2,9 @@
using System.Collections.Generic ;
using System.Linq ;
using System.Threading.Tasks ;
using AutoMapper ;
using Ombi.Api.TheMovieDb ;
using Ombi.Api.TheMovieDb.Models ;
using Ombi.Core.Models.Requests ;
using Ombi.Core.Models.Search ;
using Ombi.Core.Requests.Models ;
@ -15,13 +18,15 @@ namespace Ombi.Core.Engine
public class MovieEngine : IMovieEngine
{
public MovieEngine ( IRequestService service , IMovieDbApi movApi )
public MovieEngine ( IRequestService service , IMovieDbApi movApi , IMapper mapper )
{
RequestService = service ;
MovieApi = movApi ;
Mapper = mapper ;
}
private IRequestService RequestService { get ; }
private IMovieDbApi MovieApi { get ; }
private IMapper Mapper { get ; }
public async Task < IEnumerable < SearchMovieViewModel > > LookupImdbInformation ( IEnumerable < SearchMovieViewModel > movies )
{
@ -31,27 +36,8 @@ namespace Ombi.Core.Engine
{
var movieInfo = await MovieApi . GetMovieInformationWithVideo ( m . Id ) ;
var viewMovie = new SearchMovieViewModel
{
Adult = movieInfo . adult ,
BackdropPath = movieInfo . backdrop_path ,
Id = movieInfo . id ,
OriginalLanguage = movieInfo . original_language ,
OriginalTitle = movieInfo . original_title ,
Overview = movieInfo . overview ,
Popularity = movieInfo . popularity ,
PosterPath = movieInfo . poster_path ,
ReleaseDate =
string . IsNullOrEmpty ( movieInfo . release_date )
? DateTime . MinValue
: DateTime . Parse ( movieInfo . release_date ) ,
Title = movieInfo . title ,
Video = movieInfo . video ,
VoteAverage = movieInfo . vote_average ,
VoteCount = movieInfo . vote_count ,
ImdbId = movieInfo ? . imdb_id ,
Homepage = movieInfo ? . homepage
} ;
var viewMovie = Mapper . Map < SearchMovieViewModel > ( movieInfo ) ;
retVal . Add ( viewMovie ) ;
// TODO needs to be careful about this, it's adding extra time to search...
// https://www.themoviedb.org/talk/5807f4cdc3a36812160041f2
@ -62,9 +48,9 @@ namespace Ombi.Core.Engine
//viewMovie.Trailer = string.IsNullOrEmpty(videoId)
// ? string.Empty
// : $"https://www.youtube.com/watch?v={videoId}";
if ( dbMovies . ContainsKey ( movieInfo . i d) /*&& canSee*/ ) // compare to the requests db
if ( dbMovies . ContainsKey ( movieInfo . I d) /*&& canSee*/ ) // compare to the requests db
{
var dbm = dbMovies [ movieInfo . i d] ;
var dbm = dbMovies [ movieInfo . I d] ;
viewMovie . Requested = true ;
viewMovie . Approved = dbm . Approved ;
@ -76,59 +62,54 @@ namespace Ombi.Core.Engine
public async Task < IEnumerable < SearchMovieViewModel > > ProcessMovieSearch ( string search )
{
var api = new TheMovieDbApi . TheMovieDbApi ( ) ;
var result = await api . SearchMovie ( search ) ;
var result = await MovieApi . SearchMovie ( search ) ;
if ( result ! = null )
{
return await TransformMovieResultsToResponse ( result .results );
return await TransformMovieResultsToResponse ( result );
}
return null ;
}
public async Task < IEnumerable < SearchMovieViewModel > > PopularMovies ( )
{
var api = new TheMovieDbApi . TheMovieDbApi ( ) ;
var result = await api . PopularMovies ( ) ;
var result = await MovieApi . PopularMovies ( ) ;
if ( result ! = null )
{
return await TransformMovieResultsToResponse ( result .results );
return await TransformMovieResultsToResponse ( result );
}
return null ;
}
public async Task < IEnumerable < SearchMovieViewModel > > TopRatedMovies ( )
{
var api = new TheMovieDbApi . TheMovieDbApi ( ) ;
var result = await api . TopRated ( ) ;
var result = await MovieApi . TopRated ( ) ;
if ( result ! = null )
{
return await TransformMovieResultsToResponse ( result .results );
return await TransformMovieResultsToResponse ( result );
}
return null ;
}
public async Task < IEnumerable < SearchMovieViewModel > > UpcomingMovies ( )
{
var api = new TheMovieDbApi . TheMovieDbApi ( ) ;
var result = await api . Upcoming ( ) ;
var result = await MovieApi . Upcoming ( ) ;
if ( result ! = null )
{
return await TransformMovieResultsToResponse ( result .results );
return await TransformMovieResultsToResponse ( result );
}
return null ;
}
public async Task < IEnumerable < SearchMovieViewModel > > NowPlayingMovies ( )
{
var api = new TheMovieDbApi . TheMovieDbApi ( ) ;
var result = await api . NowPlaying ( ) ;
var result = await MovieApi . NowPlaying ( ) ;
if ( result ! = null )
{
return await TransformMovieResultsToResponse ( result .results );
return await TransformMovieResultsToResponse ( result );
}
return null ;
}
private async Task < List < SearchMovieViewModel > > TransformMovieResultsToResponse ( IEnumerable < SearchResult> movies )
private async Task < List < SearchMovieViewModel > > TransformMovieResultsToResponse ( IEnumerable < Movie SearchResult> movies )
{
await Task . Yield ( ) ;
var viewMovies = new List < SearchMovieViewModel > ( ) ;
@ -136,22 +117,8 @@ namespace Ombi.Core.Engine
Dictionary < int , RequestModel > dbMovies = await RequestedMovies ( ) ;
foreach ( var movie in movies )
{
var viewMovie = new SearchMovieViewModel
{
Adult = movie . adult ,
BackdropPath = movie . backdrop_path ,
Id = movie . id ,
OriginalLanguage = movie . original_language ,
OriginalTitle = movie . original_title ,
Overview = movie . overview ,
Popularity = movie . popularity ,
PosterPath = movie . poster_path ,
ReleaseDate = string . IsNullOrEmpty ( movie . release_date ) ? DateTime . MinValue : DateTime . Parse ( movie . release_date ) ,
Title = movie . title ,
Video = movie . video ,
VoteAverage = movie . vote_average ,
VoteCount = movie . vote_count
} ;
var viewMovie = Mapper . Map < SearchMovieViewModel > ( movie ) ;
viewMovies . Add ( viewMovie ) ;
@ -186,9 +153,9 @@ namespace Ombi.Core.Engine
// viewMovie.Available = true;
// }
// }
if ( dbMovies . ContainsKey ( movie . i d) /*&& canSee*/ ) // compare to the requests db
if ( dbMovies . ContainsKey ( movie . I d) /*&& canSee*/ ) // compare to the requests db
{
var dbm = dbMovies [ movie . i d] ;
var dbm = dbMovies [ movie . I d] ;
viewMovie . Requested = true ;
viewMovie . Approved = dbm . Approved ;