diff --git a/src/NzbDrone.Core/IndexerSearch/MoviesSearchService.cs b/src/NzbDrone.Core/IndexerSearch/MoviesSearchService.cs index 7f86259c2e..f1ed4bd8dd 100644 --- a/src/NzbDrone.Core/IndexerSearch/MoviesSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/MoviesSearchService.cs @@ -62,8 +62,8 @@ public void Execute(MissingMoviesSearchCommand message) var movies = _movieService.MoviesWithoutFiles(pagingSpec).Records.ToList(); - var queue = _queueService.GetQueue().Where(q => q.Movie != null).Select(q => q.Movie.Id); - var missing = movies.Where(e => !queue.Contains(e.Id)).ToList(); + var queuedMovieIds = new HashSet(_queueService.GetQueue().Where(q => q.Movie != null).Select(q => q.Movie.Id)); + var missing = movies.Where(e => !queuedMovieIds.Contains(e.Id)).ToList(); SearchForBulkMovies(missing, message.Trigger == CommandTrigger.Manual).GetAwaiter().GetResult(); } @@ -82,8 +82,8 @@ public void Execute(CutoffUnmetMoviesSearchCommand message) var movies = _movieCutoffService.MoviesWhereCutoffUnmet(pagingSpec).Records.ToList(); - var queue = _queueService.GetQueue().Where(q => q.Movie != null).Select(q => q.Movie.Id); - var missing = movies.Where(e => !queue.Contains(e.Id)).ToList(); + var queuedMovieIds = new HashSet(_queueService.GetQueue().Where(q => q.Movie != null).Select(q => q.Movie.Id)); + var missing = movies.Where(e => !queuedMovieIds.Contains(e.Id)).ToList(); SearchForBulkMovies(missing, message.Trigger == CommandTrigger.Manual).GetAwaiter().GetResult(); } diff --git a/src/NzbDrone.Core/Movies/MovieService.cs b/src/NzbDrone.Core/Movies/MovieService.cs index 60242f938d..9a18da5edf 100644 --- a/src/NzbDrone.Core/Movies/MovieService.cs +++ b/src/NzbDrone.Core/Movies/MovieService.cs @@ -125,31 +125,32 @@ public Movie FindByTitle(string title, int year) public Movie FindByTitle(List titles, int? year, List otherTitles, List candidates) { - var cleanTitles = titles.Select(t => t.CleanMovieTitle().ToLowerInvariant()); + var cleanTitlesSet = new HashSet(titles.Select(t => t.CleanMovieTitle().ToLowerInvariant())); + var otherTitlesSet = new HashSet(otherTitles); - var result = candidates.Where(x => cleanTitles.Contains(x.MovieMetadata.Value.CleanTitle) || cleanTitles.Contains(x.MovieMetadata.Value.CleanOriginalTitle)) + var result = candidates.Where(x => cleanTitlesSet.Contains(x.MovieMetadata.Value.CleanTitle) || cleanTitlesSet.Contains(x.MovieMetadata.Value.CleanOriginalTitle)) .AllWithYear(year) .ToList(); if (result == null || result.Count == 0) { result = - candidates.Where(movie => otherTitles.Contains(movie.MovieMetadata.Value.CleanTitle)).AllWithYear(year).ToList(); + candidates.Where(movie => otherTitlesSet.Contains(movie.MovieMetadata.Value.CleanTitle)).AllWithYear(year).ToList(); } if (result == null || result.Count == 0) { result = candidates - .Where(m => m.MovieMetadata.Value.AlternativeTitles.Any(t => cleanTitles.Contains(t.CleanTitle) || - otherTitles.Contains(t.CleanTitle))) + .Where(m => m.MovieMetadata.Value.AlternativeTitles.Any(t => cleanTitlesSet.Contains(t.CleanTitle) || + otherTitlesSet.Contains(t.CleanTitle))) .AllWithYear(year).ToList(); } if (result == null || result.Count == 0) { result = candidates - .Where(m => m.MovieMetadata.Value.Translations.Any(t => cleanTitles.Contains(t.CleanTitle) || - otherTitles.Contains(t.CleanTitle))) + .Where(m => m.MovieMetadata.Value.Translations.Any(t => cleanTitlesSet.Contains(t.CleanTitle) || + otherTitlesSet.Contains(t.CleanTitle))) .AllWithYear(year).ToList(); }