From e3fb00022608cf6e426783dd63cc81689e8fcd15 Mon Sep 17 00:00:00 2001 From: Qstick Date: Tue, 4 Aug 2020 23:00:21 -0400 Subject: [PATCH] Fixed: Use Translations in Search Criteria Map Fixes #4794 --- .../ParsingServiceTests/MapFixture.cs | 16 ++++++++ .../IndexerSearch/NzbSearchService.cs | 1 + src/NzbDrone.Core/Parser/ParsingService.cs | 38 +++++++++---------- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs b/src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs index 0a46da3a6..9756600a8 100644 --- a/src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs @@ -8,6 +8,7 @@ using NzbDrone.Core.Languages; using NzbDrone.Core.Movies; using NzbDrone.Core.Movies.AlternativeTitles; +using NzbDrone.Core.Movies.Translations; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Test.Common; @@ -23,6 +24,7 @@ public class MapFixture : TestBase private ParsedMovieInfo _wrongTitleInfo; private ParsedMovieInfo _romanTitleInfo; private ParsedMovieInfo _alternativeTitleInfo; + private ParsedMovieInfo _translationTitleInfo; private ParsedMovieInfo _umlautInfo; private ParsedMovieInfo _umlautAltInfo; private MovieSearchCriteria _movieSearchCriteria; @@ -35,6 +37,7 @@ public void Setup() .With(m => m.CleanTitle = "fackjugoethe2") .With(m => m.Year = 2015) .With(m => m.AlternativeTitles = new List { new AlternativeTitle("Fack Ju Göthe 2: Same same") }) + .With(m => m.Translations = new List { new MovieTranslation { Title = "Translated Title", CleanTitle = "translatedtitle" } }) .With(m => m.OriginalLanguage = Language.English) .Build(); @@ -66,6 +69,13 @@ public void Setup() Year = _movie.Year, }; + _translationTitleInfo = new ParsedMovieInfo + { + MovieTitle = _movie.Translations.First().Title, + Languages = new List { Language.English }, + Year = _movie.Year, + }; + _romanTitleInfo = new ParsedMovieInfo { MovieTitle = "Fack Ju Göthe II", @@ -152,6 +162,12 @@ public void should_match_alternative_title() Subject.Map(_alternativeTitleInfo, "", _movieSearchCriteria).Movie.Should().Be(_movieSearchCriteria.Movie); } + [Test] + public void should_match_translation_title() + { + Subject.Map(_translationTitleInfo, "", _movieSearchCriteria).Movie.Should().Be(_movieSearchCriteria.Movie); + } + [Test] public void should_match_roman_title() { diff --git a/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs b/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs index 0ffeeb842..2dabe59fa 100644 --- a/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/NzbSearchService.cs @@ -49,6 +49,7 @@ public NzbSearchService(IIndexerFactory indexerFactory, public List MovieSearch(int movieId, bool userInvokedSearch, bool interactiveSearch) { var movie = _movieService.GetMovie(movieId); + movie.Translations = _movieTranslationService.GetAllTranslationsForMovie(movie.Id); return MovieSearch(movie, userInvokedSearch, interactiveSearch); } diff --git a/src/NzbDrone.Core/Parser/ParsingService.cs b/src/NzbDrone.Core/Parser/ParsingService.cs index 419bd3176..628e87608 100644 --- a/src/NzbDrone.Core/Parser/ParsingService.cs +++ b/src/NzbDrone.Core/Parser/ParsingService.cs @@ -8,7 +8,6 @@ using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.Languages; using NzbDrone.Core.Movies; -using NzbDrone.Core.Movies.AlternativeTitles; using NzbDrone.Core.Parser.Augmenters; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Parser.RomanNumerals; @@ -148,8 +147,8 @@ public MappingResult Map(ParsedMovieInfo parsedMovieInfo, string imdbId, SearchC private MappingResult GetMovie(ParsedMovieInfo parsedMovieInfo, string imdbId, SearchCriteriaBase searchCriteria) { - // TODO: Answer me this: Wouldn't it be smarter to start out looking for a movie if we have an ImDb Id? MappingResult result = null; + if (!string.IsNullOrWhiteSpace(imdbId) && imdbId != "0") { if (TryGetMovieByImDbId(parsedMovieInfo, imdbId, out result)) @@ -167,8 +166,10 @@ private MappingResult GetMovie(ParsedMovieInfo parsedMovieInfo, string imdbId, S } else { - TryGetMovieByTitleAndOrYear(parsedMovieInfo, out result); - return result; + if (TryGetMovieByTitleAndOrYear(parsedMovieInfo, out result)) + { + return result; + } } // nothing found up to here => logging that and returning null @@ -202,7 +203,7 @@ private bool TryGetMovieByImDbId(ParsedMovieInfo parsedMovieInfo, string imdbId, private bool TryGetMovieByTitleAndOrYear(ParsedMovieInfo parsedMovieInfo, out MappingResult result) { Func isNotNull = movie => movie != null; - Movie movieByTitleAndOrYear = null; + Movie movieByTitleAndOrYear; if (parsedMovieInfo.Year > 1800) { @@ -239,36 +240,33 @@ private bool TryGetMovieBySearchCriteria(ParsedMovieInfo parsedMovieInfo, Search { Movie possibleMovie = null; - List possibleTitles = new List(); + var possibleTitles = new List(); possibleTitles.Add(searchCriteria.Movie.CleanTitle); + possibleTitles.AddRange(searchCriteria.Movie.AlternativeTitles.Select(t => t.CleanTitle)); + possibleTitles.AddRange(searchCriteria.Movie.Translations.Select(t => t.CleanTitle)); - foreach (AlternativeTitle altTitle in searchCriteria.Movie.AlternativeTitles) + var cleanTitle = parsedMovieInfo.MovieTitle.CleanMovieTitle(); + + foreach (var title in possibleTitles) { - possibleTitles.Add(altTitle.CleanTitle); - } - - string cleanTitle = parsedMovieInfo.MovieTitle.CleanMovieTitle(); - - foreach (string title in possibleTitles) - { - if (title == parsedMovieInfo.MovieTitle.CleanMovieTitle()) + if (title == cleanTitle) { possibleMovie = searchCriteria.Movie; } - foreach (ArabicRomanNumeral numeralMapping in _arabicRomanNumeralMappings) + foreach (var numeralMapping in _arabicRomanNumeralMappings) { - string arabicNumeral = numeralMapping.ArabicNumeralAsString; - string romanNumeral = numeralMapping.RomanNumeralLowerCase; + var arabicNumeral = numeralMapping.ArabicNumeralAsString; + var romanNumeral = numeralMapping.RomanNumeralLowerCase; //_logger.Debug(cleanTitle); - if (title.Replace(arabicNumeral, romanNumeral) == parsedMovieInfo.MovieTitle.CleanMovieTitle()) + if (title.Replace(arabicNumeral, romanNumeral) == cleanTitle) { possibleMovie = searchCriteria.Movie; } - if (title == parsedMovieInfo.MovieTitle.CleanMovieTitle().Replace(arabicNumeral, romanNumeral)) + if (title == cleanTitle.Replace(arabicNumeral, romanNumeral)) { possibleMovie = searchCriteria.Movie; }