From 2ac139ab4db930b53a55a9194565d21f95b2523b Mon Sep 17 00:00:00 2001 From: kephasdev <160031725+kephasdev@users.noreply.github.com> Date: Fri, 17 Jan 2025 13:32:09 -0500 Subject: [PATCH] Fixed: Augmenting languages for releases with MULTI and other languages (cherry picked from commit d58135bf1754b6185eef19a2f4069b27a918d01e) --- .../Aggregators/AggregateLanguagesFixture.cs | 44 +++++++++++++++++++ .../Aggregators/AggregateLanguages.cs | 11 ++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/Download/Aggregation/Aggregators/AggregateLanguagesFixture.cs b/src/NzbDrone.Core.Test/Download/Aggregation/Aggregators/AggregateLanguagesFixture.cs index ac23ade33..0f2759bd2 100644 --- a/src/NzbDrone.Core.Test/Download/Aggregation/Aggregators/AggregateLanguagesFixture.cs +++ b/src/NzbDrone.Core.Test/Download/Aggregation/Aggregators/AggregateLanguagesFixture.cs @@ -168,6 +168,50 @@ namespace NzbDrone.Core.Test.Download.Aggregation.Aggregators Mocker.GetMock().VerifyNoOtherCalls(); } + [Test] + public void should_return_multi_languages_when_release_as_specified_language_and_indexer_has_multi_languages_configuration() + { + var releaseTitle = "Series.Title.S01E01.MULTi.VFF.VFQ.1080p.BluRay.DTS.HDMA.x264-RlsGroup"; + var indexerDefinition = new IndexerDefinition + { + Id = 1, + Settings = new TorrentRssIndexerSettings { MultiLanguages = new List { Language.Original.Id, Language.French.Id } } + }; + Mocker.GetMock() + .Setup(v => v.Find(1)) + .Returns(indexerDefinition); + + _remoteEpisode.ParsedEpisodeInfo = GetParsedEpisodeInfo(new List { Language.French }, releaseTitle); + _remoteEpisode.Release.IndexerId = 1; + _remoteEpisode.Release.Title = releaseTitle; + + Subject.Aggregate(_remoteEpisode).Languages.Should().BeEquivalentTo(new List { _series.OriginalLanguage, Language.French }); + Mocker.GetMock().Verify(c => c.Find(1), Times.Once()); + Mocker.GetMock().VerifyNoOtherCalls(); + } + + [Test] + public void should_return_multi_languages_when_release_as_other_language_and_indexer_has_multi_languages_configuration() + { + var releaseTitle = "Series.Title.S01E01.MULTi.GERMAN.1080p.BluRay.DTS.HDMA.x264-RlsGroup"; + var indexerDefinition = new IndexerDefinition + { + Id = 1, + Settings = new TorrentRssIndexerSettings { MultiLanguages = new List { Language.Original.Id, Language.French.Id } } + }; + Mocker.GetMock() + .Setup(v => v.Find(1)) + .Returns(indexerDefinition); + + _remoteEpisode.ParsedEpisodeInfo = GetParsedEpisodeInfo(new List { Language.German }, releaseTitle); + _remoteEpisode.Release.IndexerId = 1; + _remoteEpisode.Release.Title = releaseTitle; + + Subject.Aggregate(_remoteEpisode).Languages.Should().BeEquivalentTo(new List { _series.OriginalLanguage, Language.French, Language.German }); + Mocker.GetMock().Verify(c => c.Find(1), Times.Once()); + Mocker.GetMock().VerifyNoOtherCalls(); + } + [Test] public void should_return_original_when_indexer_has_no_multi_languages_configuration() { diff --git a/src/NzbDrone.Core/Download/Aggregation/Aggregators/AggregateLanguages.cs b/src/NzbDrone.Core/Download/Aggregation/Aggregators/AggregateLanguages.cs index afa96dd1c..f08b5c7a5 100644 --- a/src/NzbDrone.Core/Download/Aggregation/Aggregators/AggregateLanguages.cs +++ b/src/NzbDrone.Core/Download/Aggregation/Aggregators/AggregateLanguages.cs @@ -76,7 +76,7 @@ namespace NzbDrone.Core.Download.Aggregation.Aggregators languages = languages.Except(languagesToRemove).ToList(); } - if ((languages.Count == 0 || (languages.Count == 1 && languages.First() == Language.Unknown)) && releaseInfo?.Title?.IsNotNullOrWhiteSpace() == true) + if (releaseInfo?.Title?.IsNotNullOrWhiteSpace() == true) { IndexerDefinition indexer = null; @@ -93,7 +93,14 @@ namespace NzbDrone.Core.Download.Aggregation.Aggregators if (indexer?.Settings is IIndexerSettings settings && settings.MultiLanguages.Any() && Parser.Parser.HasMultipleLanguages(releaseInfo.Title)) { // Use indexer setting for Multi-languages - languages = settings.MultiLanguages.Select(i => (Language)i).ToList(); + if (languages.Count == 0 || (languages.Count == 1 && languages.First() == Language.Unknown)) + { + languages = settings.MultiLanguages.Select(i => (Language)i).ToList(); + } + else + { + languages.AddRange(settings.MultiLanguages.Select(i => (Language)i).Except(languages).ToList()); + } } }