1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-09-11 20:12:41 +02:00

Fixed: Use Translations in Search Criteria Map

Fixes #4794
This commit is contained in:
Qstick 2020-08-04 23:00:21 -04:00
parent 9cb3ff238b
commit e3fb000226
3 changed files with 35 additions and 20 deletions

View File

@ -8,6 +8,7 @@
using NzbDrone.Core.Languages; using NzbDrone.Core.Languages;
using NzbDrone.Core.Movies; using NzbDrone.Core.Movies;
using NzbDrone.Core.Movies.AlternativeTitles; using NzbDrone.Core.Movies.AlternativeTitles;
using NzbDrone.Core.Movies.Translations;
using NzbDrone.Core.Parser; using NzbDrone.Core.Parser;
using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Parser.Model;
using NzbDrone.Test.Common; using NzbDrone.Test.Common;
@ -23,6 +24,7 @@ public class MapFixture : TestBase<ParsingService>
private ParsedMovieInfo _wrongTitleInfo; private ParsedMovieInfo _wrongTitleInfo;
private ParsedMovieInfo _romanTitleInfo; private ParsedMovieInfo _romanTitleInfo;
private ParsedMovieInfo _alternativeTitleInfo; private ParsedMovieInfo _alternativeTitleInfo;
private ParsedMovieInfo _translationTitleInfo;
private ParsedMovieInfo _umlautInfo; private ParsedMovieInfo _umlautInfo;
private ParsedMovieInfo _umlautAltInfo; private ParsedMovieInfo _umlautAltInfo;
private MovieSearchCriteria _movieSearchCriteria; private MovieSearchCriteria _movieSearchCriteria;
@ -35,6 +37,7 @@ public void Setup()
.With(m => m.CleanTitle = "fackjugoethe2") .With(m => m.CleanTitle = "fackjugoethe2")
.With(m => m.Year = 2015) .With(m => m.Year = 2015)
.With(m => m.AlternativeTitles = new List<AlternativeTitle> { new AlternativeTitle("Fack Ju Göthe 2: Same same") }) .With(m => m.AlternativeTitles = new List<AlternativeTitle> { new AlternativeTitle("Fack Ju Göthe 2: Same same") })
.With(m => m.Translations = new List<MovieTranslation> { new MovieTranslation { Title = "Translated Title", CleanTitle = "translatedtitle" } })
.With(m => m.OriginalLanguage = Language.English) .With(m => m.OriginalLanguage = Language.English)
.Build(); .Build();
@ -66,6 +69,13 @@ public void Setup()
Year = _movie.Year, Year = _movie.Year,
}; };
_translationTitleInfo = new ParsedMovieInfo
{
MovieTitle = _movie.Translations.First().Title,
Languages = new List<Language> { Language.English },
Year = _movie.Year,
};
_romanTitleInfo = new ParsedMovieInfo _romanTitleInfo = new ParsedMovieInfo
{ {
MovieTitle = "Fack Ju Göthe II", 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); 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] [Test]
public void should_match_roman_title() public void should_match_roman_title()
{ {

View File

@ -49,6 +49,7 @@ public NzbSearchService(IIndexerFactory indexerFactory,
public List<DownloadDecision> MovieSearch(int movieId, bool userInvokedSearch, bool interactiveSearch) public List<DownloadDecision> MovieSearch(int movieId, bool userInvokedSearch, bool interactiveSearch)
{ {
var movie = _movieService.GetMovie(movieId); var movie = _movieService.GetMovie(movieId);
movie.Translations = _movieTranslationService.GetAllTranslationsForMovie(movie.Id);
return MovieSearch(movie, userInvokedSearch, interactiveSearch); return MovieSearch(movie, userInvokedSearch, interactiveSearch);
} }

View File

@ -8,7 +8,6 @@
using NzbDrone.Core.IndexerSearch.Definitions; using NzbDrone.Core.IndexerSearch.Definitions;
using NzbDrone.Core.Languages; using NzbDrone.Core.Languages;
using NzbDrone.Core.Movies; using NzbDrone.Core.Movies;
using NzbDrone.Core.Movies.AlternativeTitles;
using NzbDrone.Core.Parser.Augmenters; using NzbDrone.Core.Parser.Augmenters;
using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Parser.Model;
using NzbDrone.Core.Parser.RomanNumerals; 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) 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; MappingResult result = null;
if (!string.IsNullOrWhiteSpace(imdbId) && imdbId != "0") if (!string.IsNullOrWhiteSpace(imdbId) && imdbId != "0")
{ {
if (TryGetMovieByImDbId(parsedMovieInfo, imdbId, out result)) if (TryGetMovieByImDbId(parsedMovieInfo, imdbId, out result))
@ -167,8 +166,10 @@ private MappingResult GetMovie(ParsedMovieInfo parsedMovieInfo, string imdbId, S
} }
else else
{ {
TryGetMovieByTitleAndOrYear(parsedMovieInfo, out result); if (TryGetMovieByTitleAndOrYear(parsedMovieInfo, out result))
return result; {
return result;
}
} }
// nothing found up to here => logging that and returning null // 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) private bool TryGetMovieByTitleAndOrYear(ParsedMovieInfo parsedMovieInfo, out MappingResult result)
{ {
Func<Movie, bool> isNotNull = movie => movie != null; Func<Movie, bool> isNotNull = movie => movie != null;
Movie movieByTitleAndOrYear = null; Movie movieByTitleAndOrYear;
if (parsedMovieInfo.Year > 1800) if (parsedMovieInfo.Year > 1800)
{ {
@ -239,36 +240,33 @@ private bool TryGetMovieBySearchCriteria(ParsedMovieInfo parsedMovieInfo, Search
{ {
Movie possibleMovie = null; Movie possibleMovie = null;
List<string> possibleTitles = new List<string>(); var possibleTitles = new List<string>();
possibleTitles.Add(searchCriteria.Movie.CleanTitle); 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); if (title == cleanTitle)
}
string cleanTitle = parsedMovieInfo.MovieTitle.CleanMovieTitle();
foreach (string title in possibleTitles)
{
if (title == parsedMovieInfo.MovieTitle.CleanMovieTitle())
{ {
possibleMovie = searchCriteria.Movie; possibleMovie = searchCriteria.Movie;
} }
foreach (ArabicRomanNumeral numeralMapping in _arabicRomanNumeralMappings) foreach (var numeralMapping in _arabicRomanNumeralMappings)
{ {
string arabicNumeral = numeralMapping.ArabicNumeralAsString; var arabicNumeral = numeralMapping.ArabicNumeralAsString;
string romanNumeral = numeralMapping.RomanNumeralLowerCase; var romanNumeral = numeralMapping.RomanNumeralLowerCase;
//_logger.Debug(cleanTitle); //_logger.Debug(cleanTitle);
if (title.Replace(arabicNumeral, romanNumeral) == parsedMovieInfo.MovieTitle.CleanMovieTitle()) if (title.Replace(arabicNumeral, romanNumeral) == cleanTitle)
{ {
possibleMovie = searchCriteria.Movie; possibleMovie = searchCriteria.Movie;
} }
if (title == parsedMovieInfo.MovieTitle.CleanMovieTitle().Replace(arabicNumeral, romanNumeral)) if (title == cleanTitle.Replace(arabicNumeral, romanNumeral))
{ {
possibleMovie = searchCriteria.Movie; possibleMovie = searchCriteria.Movie;
} }