mirror of
https://github.com/Radarr/Radarr
synced 2026-01-24 00:13:43 +01:00
Optimize O(n*m) Contains patterns with HashSet
- MovieService.FindByTitle: Convert title lists to HashSets - MoviesSearchService: Convert queue IDs to HashSet
This commit is contained in:
parent
0e5abe56f0
commit
dda89e2fda
2 changed files with 12 additions and 11 deletions
|
|
@ -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<int>(_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<int>(_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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,31 +125,32 @@ public Movie FindByTitle(string title, int year)
|
|||
|
||||
public Movie FindByTitle(List<string> titles, int? year, List<string> otherTitles, List<Movie> candidates)
|
||||
{
|
||||
var cleanTitles = titles.Select(t => t.CleanMovieTitle().ToLowerInvariant());
|
||||
var cleanTitlesSet = new HashSet<string>(titles.Select(t => t.CleanMovieTitle().ToLowerInvariant()));
|
||||
var otherTitlesSet = new HashSet<string>(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();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue