From 3935dcb811224ba4904766602794f7577b7831f4 Mon Sep 17 00:00:00 2001 From: "Jamie.Rees" Date: Fri, 21 Apr 2017 16:31:11 +0100 Subject: [PATCH] Small changes --- Ombi/Ombi.Core.Tests/MovieEngineTests.cs | 16 +++ Ombi/Ombi.Core.Tests/Ombi.Core.Tests.csproj | 21 +++ Ombi/Ombi.Core/Engine/BaseMediaEngine.cs | 40 ++++++ .../Ombi.Core/Engine/Interfaces/BaseEngine.cs | 22 ++++ Ombi/Ombi.Core/Engine/MovieEngine.cs | 123 +++++++----------- Ombi/Ombi.Core/Engine/RequestEngine.cs | 24 +--- Ombi/Ombi.Mapping/AutoMapperProfile.cs | 1 - .../Ombi.Api.TheMovieDb.csproj | 1 + Ombi/Ombi.TheMovieDbApi/TheMovieDbApi.cs | 3 +- Ombi/Ombi.sln | 9 ++ 10 files changed, 157 insertions(+), 103 deletions(-) create mode 100644 Ombi/Ombi.Core.Tests/MovieEngineTests.cs create mode 100644 Ombi/Ombi.Core.Tests/Ombi.Core.Tests.csproj create mode 100644 Ombi/Ombi.Core/Engine/BaseMediaEngine.cs create mode 100644 Ombi/Ombi.Core/Engine/Interfaces/BaseEngine.cs diff --git a/Ombi/Ombi.Core.Tests/MovieEngineTests.cs b/Ombi/Ombi.Core.Tests/MovieEngineTests.cs new file mode 100644 index 000000000..8050b65f1 --- /dev/null +++ b/Ombi/Ombi.Core.Tests/MovieEngineTests.cs @@ -0,0 +1,16 @@ +using System; +using NUnit.Framework; + +namespace Ombi.Core.Tests +{ + [TestFixture] + public class MovieEngineTests + { + + [Test] + public void Test() + { + Assert.IsTrue(true); + } + } +} diff --git a/Ombi/Ombi.Core.Tests/Ombi.Core.Tests.csproj b/Ombi/Ombi.Core.Tests/Ombi.Core.Tests.csproj new file mode 100644 index 000000000..a3b14d63f --- /dev/null +++ b/Ombi/Ombi.Core.Tests/Ombi.Core.Tests.csproj @@ -0,0 +1,21 @@ + + + + Library + + + + netstandard1.6 + + Exe + library + + + + + + + + + + \ No newline at end of file diff --git a/Ombi/Ombi.Core/Engine/BaseMediaEngine.cs b/Ombi/Ombi.Core/Engine/BaseMediaEngine.cs new file mode 100644 index 000000000..6a3df8195 --- /dev/null +++ b/Ombi/Ombi.Core/Engine/BaseMediaEngine.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Ombi.Core.Engine.Interfaces; +using Ombi.Core.IdentityResolver; +using Ombi.Core.Models.Requests; +using Ombi.Core.Requests.Models; +using Ombi.Helpers; +using Ombi.Store.Entities; + +namespace Ombi.Core.Engine +{ + public abstract class BaseMediaEngine : BaseEngine + { + protected BaseMediaEngine(IUserIdentityManager identity, IRequestService service) : base(identity) + { + RequestService = service; + } + + protected IRequestService RequestService { get; } + + private long _dbMovieCacheTime = 0; + private Dictionary _dbMovies; + protected async Task> GetRequests(RequestType type) + { + long now = DateTime.Now.Ticks; + if (_dbMovies == null || (now - _dbMovieCacheTime) > 10000) + { + var allResults = await RequestService.GetAllAsync(); + allResults = allResults.Where(x => x.Type == type); + + var distinctResults = allResults.DistinctBy(x => x.ProviderId); + _dbMovies = distinctResults.ToDictionary(x => x.ProviderId); + _dbMovieCacheTime = now; + } + return _dbMovies; + } + } +} \ No newline at end of file diff --git a/Ombi/Ombi.Core/Engine/Interfaces/BaseEngine.cs b/Ombi/Ombi.Core/Engine/Interfaces/BaseEngine.cs new file mode 100644 index 000000000..39573d793 --- /dev/null +++ b/Ombi/Ombi.Core/Engine/Interfaces/BaseEngine.cs @@ -0,0 +1,22 @@ +using System.Threading.Tasks; +using Ombi.Core.IdentityResolver; +using Ombi.Core.Models; + +namespace Ombi.Core.Engine.Interfaces +{ + public abstract class BaseEngine + { + protected BaseEngine(IUserIdentityManager identity) + { + UserIdentity = identity; + } + + protected IUserIdentityManager UserIdentity { get; } + + protected async Task GetUser(string username) + { + + } + + } +} \ No newline at end of file diff --git a/Ombi/Ombi.Core/Engine/MovieEngine.cs b/Ombi/Ombi.Core/Engine/MovieEngine.cs index 474f53986..63c8f4e10 100644 --- a/Ombi/Ombi.Core/Engine/MovieEngine.cs +++ b/Ombi/Ombi.Core/Engine/MovieEngine.cs @@ -1,61 +1,45 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Generic; using System.Threading.Tasks; using AutoMapper; using Ombi.Api.TheMovieDb; using Ombi.Api.TheMovieDb.Models; +using Ombi.Core.IdentityResolver; using Ombi.Core.Models.Requests; using Ombi.Core.Models.Search; using Ombi.Core.Requests.Models; -using Ombi.Helpers; +using Ombi.Core.Settings; +using Ombi.Core.Settings.Models.External; using Ombi.Store.Entities; -using Ombi.TheMovieDbApi; -using Ombi.TheMovieDbApi.Models; namespace Ombi.Core.Engine { - public class MovieEngine : IMovieEngine + public class MovieEngine : BaseMediaEngine, IMovieEngine { - public MovieEngine(IRequestService service, IMovieDbApi movApi, IMapper mapper) + public MovieEngine(IUserIdentityManager identity, IRequestService service, IMovieDbApi movApi, IMapper mapper, ISettingsService plexSettings, ISettingsService embySettings) + : base(identity, service) { - RequestService = service; MovieApi = movApi; Mapper = mapper; + PlexSettings = plexSettings; + EmbySettings = embySettings; } - private IRequestService RequestService { get; } + private IMovieDbApi MovieApi { get; } private IMapper Mapper { get; } + private ISettingsService PlexSettings { get; } + private ISettingsService EmbySettings { get; } public async Task> LookupImdbInformation(IEnumerable movies) { var retVal = new List(); - Dictionary dbMovies = await RequestedMovies(); + Dictionary dbMovies = await GetRequests(RequestType.Movie); foreach (var m in movies) { - var movieInfo = await MovieApi.GetMovieInformationWithVideo(m.Id); var viewMovie = Mapper.Map(movieInfo); - - retVal.Add(viewMovie); - // TODO needs to be careful about this, it's adding extra time to search... - // https://www.themoviedb.org/talk/5807f4cdc3a36812160041f2 - //var videoId = movieInfo?.video ?? false - // ? movieInfo?.videos?.results?.FirstOrDefault()?.key - // : string.Empty; - //viewMovie.Trailer = string.IsNullOrEmpty(videoId) - // ? string.Empty - // : $"https://www.youtube.com/watch?v={videoId}"; - if (dbMovies.ContainsKey(movieInfo.Id) /*&& canSee*/) // compare to the requests db - { - var dbm = dbMovies[movieInfo.Id]; - - viewMovie.Requested = true; - viewMovie.Approved = dbm.Approved; - viewMovie.Available = dbm.Available; - } + retVal.Add(await ProcessSingleMovie(viewMovie, dbMovies)); } return retVal; } @@ -111,24 +95,25 @@ namespace Ombi.Core.Engine private async Task> TransformMovieResultsToResponse(IEnumerable movies) { - await Task.Yield(); var viewMovies = new List(); - //var counter = 0; - Dictionary dbMovies = await RequestedMovies(); + Dictionary dbMovies = await GetRequests(RequestType.Movie); foreach (var movie in movies) { - var viewMovie = Mapper.Map(movie); - - viewMovies.Add(viewMovie); + viewMovies.Add(await ProcessSingleMovie(movie, dbMovies)); + } + return viewMovies; + } - // var canSee = CanUserSeeThisRequest(viewMovie.Id, Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests), dbMovies); + private async Task ProcessSingleMovie(SearchMovieViewModel viewMovie, + Dictionary existingRequests) + { - // var plexSettings = await PlexService.GetSettingsAsync(); - // var embySettings = await EmbySettings.GetSettingsAsync(); - // if (plexSettings.Enable) - // { + var plexSettings = await PlexSettings.GetSettingsAsync(); + var embySettings = await EmbySettings.GetSettingsAsync(); + if (plexSettings.Enable) + { // var content = PlexContentRepository.GetAll(); // var plexMovies = PlexChecker.GetPlexMovies(content); @@ -140,9 +125,9 @@ namespace Ombi.Core.Engine // viewMovie.Available = true; // viewMovie.PlexUrl = plexMovie.Url; // } - // } - // if (embySettings.Enable) - // { + } + if (embySettings.Enable) + { // var embyContent = EmbyContentRepository.GetAll(); // var embyMovies = EmbyChecker.GetEmbyMovies(embyContent); @@ -152,45 +137,25 @@ namespace Ombi.Core.Engine // { // viewMovie.Available = true; // } - // } - if (dbMovies.ContainsKey(movie.Id) /*&& canSee*/) // compare to the requests db - { - var dbm = dbMovies[movie.Id]; - - viewMovie.Requested = true; - viewMovie.Approved = dbm.Approved; - viewMovie.Available = dbm.Available; - } - // else if (canSee) - // { - // bool exists = IsMovieInCache(movie, viewMovie.ImdbId); - // viewMovie.Approved = exists; - // viewMovie.Requested = exists; - // } - // viewMovies.Add(viewMovie); - //} - - } - return viewMovies; + + if (existingRequests.ContainsKey(viewMovie.Id)) // Do we already have a request for this? + { + var requestedMovie = existingRequests[viewMovie.Id]; + + viewMovie.Requested = true; + viewMovie.Approved = requestedMovie.Approved; + viewMovie.Available = requestedMovie.Available; + } + + + return viewMovie; } - - private long _dbMovieCacheTime = 0; - private Dictionary _dbMovies; - private async Task> RequestedMovies() + private async Task ProcessSingleMovie(MovieSearchResult movie, Dictionary existingRequests) { - long now = DateTime.Now.Ticks; - if (_dbMovies == null || (now - _dbMovieCacheTime) > 10000) - { - var allResults = await RequestService.GetAllAsync(); - allResults = allResults.Where(x => x.Type == RequestType.Movie); - - var distinctResults = allResults.DistinctBy(x => x.ProviderId); - _dbMovies = distinctResults.ToDictionary(x => x.ProviderId); - _dbMovieCacheTime = now; - } - return _dbMovies; + var viewMovie = Mapper.Map(movie); + return await ProcessSingleMovie(viewMovie, existingRequests); } } } diff --git a/Ombi/Ombi.Core/Engine/RequestEngine.cs b/Ombi/Ombi.Core/Engine/RequestEngine.cs index 4275d55a5..2bbfa1c2f 100644 --- a/Ombi/Ombi.Core/Engine/RequestEngine.cs +++ b/Ombi/Ombi.Core/Engine/RequestEngine.cs @@ -32,11 +32,6 @@ namespace Ombi.Core.Engine RequestAdded = false, Message = "There was an issue adding this movie!" }; - //Response.AsJson(new JsonResponseModel - //{ - // Result = false, - // Message = "There was an issue adding this movie!" - //}); } var fullMovieName = $"{movieInfo.Title}{(!string.IsNullOrEmpty(movieInfo.ReleaseDate) ? $" ({DateTime.Parse(movieInfo.ReleaseDate).Year})" : string.Empty)}"; @@ -44,26 +39,11 @@ namespace Ombi.Core.Engine var existingRequest = await RequestService.CheckRequestAsync(model.Id); if (existingRequest != null) { - // check if the current user is already marked as a requester for this movie, if not, add them - //if (!existingRequest.UserHasRequested(Username)) - //{ - // existingRequest.RequestedUsers.Add(Username); - // await RequestService.UpdateRequestAsync(existingRequest); - //} - return new RequestEngineResult { - RequestAdded = true, - + RequestAdded = false, + Message = "This has already been requested" }; - //Response.AsJson(new JsonResponseModel - //{ - // Result = true, - // Message = - // Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests) - // ? $"{fullMovieName} {Ombi.UI.Resources.UI.Search_SuccessfullyAdded}" - // : $"{fullMovieName} {Resources.UI.Search_AlreadyRequested}" - //}); } diff --git a/Ombi/Ombi.Mapping/AutoMapperProfile.cs b/Ombi/Ombi.Mapping/AutoMapperProfile.cs index b8e2ca60b..b0b1fd725 100644 --- a/Ombi/Ombi.Mapping/AutoMapperProfile.cs +++ b/Ombi/Ombi.Mapping/AutoMapperProfile.cs @@ -23,7 +23,6 @@ namespace Ombi.Mapping } var config = new AutoMapper.MapperConfiguration(cfg => { - //cfg.AddProfile(new OmbiProfile()); cfg.AddProfiles(assemblies); }); diff --git a/Ombi/Ombi.TheMovieDbApi/Ombi.Api.TheMovieDb.csproj b/Ombi/Ombi.TheMovieDbApi/Ombi.Api.TheMovieDb.csproj index 664b64b3e..8edddaf33 100644 --- a/Ombi/Ombi.TheMovieDbApi/Ombi.Api.TheMovieDb.csproj +++ b/Ombi/Ombi.TheMovieDbApi/Ombi.Api.TheMovieDb.csproj @@ -12,6 +12,7 @@ + \ No newline at end of file diff --git a/Ombi/Ombi.TheMovieDbApi/TheMovieDbApi.cs b/Ombi/Ombi.TheMovieDbApi/TheMovieDbApi.cs index 938065036..4637958b3 100644 --- a/Ombi/Ombi.TheMovieDbApi/TheMovieDbApi.cs +++ b/Ombi/Ombi.TheMovieDbApi/TheMovieDbApi.cs @@ -3,6 +3,7 @@ using System.Net.Http; using System.Threading.Tasks; using AutoMapper; using Ombi.Api.TheMovieDb.Models; +using Ombi.Helpers; using Ombi.TheMovieDbApi.Models; namespace Ombi.Api.TheMovieDb @@ -16,7 +17,7 @@ namespace Ombi.Api.TheMovieDb } private IMapper Mapper { get; } - private const string ApiToken = "b8eabaf5608b88d0298aa189dd90bf00"; + private readonly string ApiToken = StringCipher.DecryptString("bqCrDAQABAC/mJT6JXNdlQ1boOjsHeQgyk7gcNv7tUFtwxoVEnYvqS+UdgfgoyXnBz2F6LJnKX8xGtXbzLsf6pbxDkxna6zvunivxAcAHewo2zTPjoUB5igeMB8d93fx0WO9IhGtq8oGXv++xfaXfTY3aN5NV7JmF6ziAAAAAD1e5VjRPSLOYTyJ3Hbw9bDsE/4FGxYIrvxVkqDMl1vAosOeTi+0kKPFloF6k2ptTw==", "Ombiv3SettingsEncryptionPassword"); private static readonly string BaseUri ="http://api.themoviedb.org/3/"; private Ombi.Api.Api Api { get; } diff --git a/Ombi/Ombi.sln b/Ombi/Ombi.sln index 03992f72f..007325471 100644 --- a/Ombi/Ombi.sln +++ b/Ombi/Ombi.sln @@ -40,6 +40,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ombi.Api.Emby", "Ombi.Api.E EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ombi.Api.Sonarr", "Ombi.Api.Sonarr\Ombi.Api.Sonarr.csproj", "{CFB5E008-D0D0-43C0-AA06-89E49D17F384}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{6F42AB98-9196-44C4-B888-D5E409F415A1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ombi.Core.Tests", "Ombi.Core.Tests\Ombi.Core.Tests.csproj", "{2836861C-1185-4E56-A0C2-F4EB541C74AE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -94,6 +98,10 @@ Global {CFB5E008-D0D0-43C0-AA06-89E49D17F384}.Debug|Any CPU.Build.0 = Debug|Any CPU {CFB5E008-D0D0-43C0-AA06-89E49D17F384}.Release|Any CPU.ActiveCfg = Release|Any CPU {CFB5E008-D0D0-43C0-AA06-89E49D17F384}.Release|Any CPU.Build.0 = Release|Any CPU + {2836861C-1185-4E56-A0C2-F4EB541C74AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2836861C-1185-4E56-A0C2-F4EB541C74AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2836861C-1185-4E56-A0C2-F4EB541C74AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2836861C-1185-4E56-A0C2-F4EB541C74AE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -106,5 +114,6 @@ Global {2E1A7B91-F29B-42BC-8F1E-1CF2DCC389BA} = {9293CA11-360A-4C20-A674-B9E794431BF5} {08FF107D-31E1-470D-AF86-E09B015CEE06} = {9293CA11-360A-4C20-A674-B9E794431BF5} {CFB5E008-D0D0-43C0-AA06-89E49D17F384} = {9293CA11-360A-4C20-A674-B9E794431BF5} + {2836861C-1185-4E56-A0C2-F4EB541C74AE} = {6F42AB98-9196-44C4-B888-D5E409F415A1} EndGlobalSection EndGlobal