diff --git a/src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs b/src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs index 78115c5d0..bc7de24bf 100644 --- a/src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/ParsingServiceTests/MapFixture.cs @@ -27,6 +27,8 @@ public class MapFixture : TestBase private ParsedMovieInfo _translationTitleInfo; private ParsedMovieInfo _umlautInfo; private ParsedMovieInfo _umlautAltInfo; + private ParsedMovieInfo _multiLanguageInfo; + private ParsedMovieInfo _multiLanguageWithOriginalInfo; private MovieSearchCriteria _movieSearchCriteria; [SetUp] @@ -97,6 +99,18 @@ public void Setup() Year = _movie.Year }; + _multiLanguageInfo = new ParsedMovieInfo + { + MovieTitle = _movie.Title, + Languages = new List { Language.Original, Language.French } + }; + + _multiLanguageWithOriginalInfo = new ParsedMovieInfo + { + MovieTitle = _movie.Title, + Languages = new List { Language.Original, Language.French, Language.English } + }; + _movieSearchCriteria = new MovieSearchCriteria { Movie = _movie @@ -180,5 +194,20 @@ public void should_match_umlauts() Subject.Map(_umlautInfo, "", _movieSearchCriteria).Movie.Should().Be(_movieSearchCriteria.Movie); Subject.Map(_umlautAltInfo, "", _movieSearchCriteria).Movie.Should().Be(_movieSearchCriteria.Movie); } + + [Test] + public void should_convert_original() + { + Subject.Map(_multiLanguageInfo, "", _movieSearchCriteria).RemoteMovie.ParsedMovieInfo.Languages.Should().Contain(Language.English); + Subject.Map(_multiLanguageInfo, "", _movieSearchCriteria).RemoteMovie.ParsedMovieInfo.Languages.Should().Contain(Language.French); + } + + [Test] + public void should_remove_original_as_already_exists() + { + Subject.Map(_multiLanguageWithOriginalInfo, "", _movieSearchCriteria).RemoteMovie.ParsedMovieInfo.Languages.Should().Contain(Language.English); + Subject.Map(_multiLanguageWithOriginalInfo, "", _movieSearchCriteria).RemoteMovie.ParsedMovieInfo.Languages.Should().Contain(Language.French); + Subject.Map(_multiLanguageWithOriginalInfo, "", _movieSearchCriteria).RemoteMovie.ParsedMovieInfo.Languages.Should().NotContain(Language.Original); + } } } diff --git a/src/NzbDrone.Core/Parser/ParsingService.cs b/src/NzbDrone.Core/Parser/ParsingService.cs index b4af99a93..648a4fa73 100644 --- a/src/NzbDrone.Core/Parser/ParsingService.cs +++ b/src/NzbDrone.Core/Parser/ParsingService.cs @@ -139,6 +139,15 @@ public MappingResult Map(ParsedMovieInfo parsedMovieInfo, string imdbId, SearchC _logger.Debug("Language couldn't be parsed from release, fallback to movie original language: {0}", result.Movie.OriginalLanguage.Name); } + if (parsedMovieInfo.Languages.Contains(Language.Original)) + { + parsedMovieInfo.Languages.Remove(Language.Original); + if (!parsedMovieInfo.Languages.Contains(result.Movie.OriginalLanguage)) + { + parsedMovieInfo.Languages.Add(result.Movie.OriginalLanguage); + } + } + result.RemoteMovie.ParsedMovieInfo = parsedMovieInfo; return result;