From 964c18b236398542c983f4a022429a3769a532d4 Mon Sep 17 00:00:00 2001 From: Leonardo Galli Date: Sat, 8 Jul 2017 16:13:28 +0200 Subject: [PATCH] Fixed: Lists are fetched much more efficiently. (Up to 40x loading time improvement with large lists!) --- src/NzbDrone.Api/NetImport/NetImportModule.cs | 2 +- .../NetImport/NetImportSearchService.cs | 2 +- src/NzbDrone.Core/Tv/MovieService.cs | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Api/NetImport/NetImportModule.cs b/src/NzbDrone.Api/NetImport/NetImportModule.cs index 0a92184e3..042b429d9 100644 --- a/src/NzbDrone.Api/NetImport/NetImportModule.cs +++ b/src/NzbDrone.Api/NetImport/NetImportModule.cs @@ -9,7 +9,7 @@ namespace NzbDrone.Api.NetImport { public NetImportModule(NetImportFactory netImportFactory) : base(netImportFactory, "netimport") { - PostValidator.RuleFor(c => c.RootFolderPath).NotNull(); + PostValidator.RuleFor(c => c.RootFolderPath).IsValidPath(); PostValidator.RuleFor(c => c.MinimumAvailability).NotNull(); PostValidator.RuleFor(c => c.ProfileId).NotNull(); } diff --git a/src/NzbDrone.Core/NetImport/NetImportSearchService.cs b/src/NzbDrone.Core/NetImport/NetImportSearchService.cs index b54352cef..4d0dad8bd 100644 --- a/src/NzbDrone.Core/NetImport/NetImportSearchService.cs +++ b/src/NzbDrone.Core/NetImport/NetImportSearchService.cs @@ -63,7 +63,7 @@ namespace NzbDrone.Core.NetImport { var movies = MovieListSearch(listId, onlyEnableAuto); - return movies.Where(x => !_movieService.MovieExists(x)).ToList(); + return _movieService.FilterExistingMovies(movies); } public List MovieListSearch(int listId, bool onlyEnableAuto = false) diff --git a/src/NzbDrone.Core/Tv/MovieService.cs b/src/NzbDrone.Core/Tv/MovieService.cs index 36dcbaf73..395c212f4 100644 --- a/src/NzbDrone.Core/Tv/MovieService.cs +++ b/src/NzbDrone.Core/Tv/MovieService.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; @@ -39,6 +40,7 @@ namespace NzbDrone.Core.Tv List GetAllMovies(); Movie UpdateMovie(Movie movie); List UpdateMovie(List movie); + List FilterExistingMovies(List movies); bool MoviePathExists(string folder); void RemoveAddOptions(Movie movie); List MoviesWithFiles(int movieId); @@ -444,5 +446,21 @@ namespace NzbDrone.Core.Tv return false; } + + public List FilterExistingMovies(List movies) + { + var allMovies = GetAllMovies(); + + var withTmdbid = movies.Where(m => m.TmdbId != 0).ToList(); + var withoutTmdbid = movies.Where(m => m.TmdbId == 0).ToList(); + var withImdbid = withoutTmdbid.Where(m => m.ImdbId.IsNotNullOrWhiteSpace()); + var rest = withoutTmdbid.Where(m => m.ImdbId.IsNullOrWhiteSpace()); + + var ret = withTmdbid.ExceptBy(m => m.TmdbId, allMovies, m => m.TmdbId, EqualityComparer.Default) + .Union(withImdbid.ExceptBy(m => m.ImdbId, allMovies, m => m.ImdbId, EqualityComparer.Default)) + .Union(rest.ExceptBy(m => m.Title.CleanSeriesTitle(), allMovies, m => m.CleanTitle, EqualityComparer.Default)).ToList(); + + return ret; + } } }