Fixed: Augmenting languages for releases with MULTI and other languages (#10842)

This commit is contained in:
kephasdev 2025-01-17 13:32:09 -05:00 committed by GitHub
parent b452c10da3
commit d58135bf17
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 53 additions and 2 deletions

View file

@ -167,6 +167,50 @@ public void should_return_multi_languages_when_release_as_unknown_as_default_lan
Mocker.GetMock<IIndexerFactory>().VerifyNoOtherCalls(); Mocker.GetMock<IIndexerFactory>().VerifyNoOtherCalls();
} }
[Test]
public void should_return_multi_languages_when_release_as_specified_language_and_indexer_has_multi_languages_configuration()
{
var releaseTitle = "Some.Movie.2024.MULTi.VFF.VFQ.1080p.BluRay.DTS.HDMA.x264-RlsGroup";
var indexerDefinition = new IndexerDefinition
{
Id = 1,
Settings = new TorrentRssIndexerSettings { MultiLanguages = new List<int> { Language.Original.Id, Language.French.Id } }
};
Mocker.GetMock<IIndexerFactory>()
.Setup(v => v.Find(1))
.Returns(indexerDefinition);
_remoteMovie.ParsedMovieInfo = GetParsedMovieInfo(new List<Language> { Language.French }, releaseTitle);
_remoteMovie.Release.IndexerId = 1;
_remoteMovie.Release.Title = releaseTitle;
Subject.Aggregate(_remoteMovie).Languages.Should().BeEquivalentTo(new List<Language> { _movie.MovieMetadata.Value.OriginalLanguage, Language.French });
Mocker.GetMock<IIndexerFactory>().Verify(c => c.Find(1), Times.Once());
Mocker.GetMock<IIndexerFactory>().VerifyNoOtherCalls();
}
[Test]
public void should_return_multi_languages_when_release_as_other_language_and_indexer_has_multi_languages_configuration()
{
var releaseTitle = "Some.Movie.2024.MULTi.GERMAN.1080p.BluRay.DTS.HDMA.x264-RlsGroup";
var indexerDefinition = new IndexerDefinition
{
Id = 1,
Settings = new TorrentRssIndexerSettings { MultiLanguages = new List<int> { Language.Original.Id, Language.French.Id } }
};
Mocker.GetMock<IIndexerFactory>()
.Setup(v => v.Find(1))
.Returns(indexerDefinition);
_remoteMovie.ParsedMovieInfo = GetParsedMovieInfo(new List<Language> { Language.German }, releaseTitle);
_remoteMovie.Release.IndexerId = 1;
_remoteMovie.Release.Title = releaseTitle;
Subject.Aggregate(_remoteMovie).Languages.Should().BeEquivalentTo(new List<Language> { _movie.MovieMetadata.Value.OriginalLanguage, Language.French, Language.German });
Mocker.GetMock<IIndexerFactory>().Verify(c => c.Find(1), Times.Once());
Mocker.GetMock<IIndexerFactory>().VerifyNoOtherCalls();
}
[Test] [Test]
public void should_return_original_when_indexer_has_no_multi_languages_configuration() public void should_return_original_when_indexer_has_no_multi_languages_configuration()
{ {

View file

@ -71,7 +71,7 @@ public RemoteMovie Aggregate(RemoteMovie remoteMovie)
languages = languages.Except(languagesToRemove).ToList(); 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; IndexerDefinition indexer = null;
@ -88,7 +88,14 @@ public RemoteMovie Aggregate(RemoteMovie remoteMovie)
if (indexer?.Settings is IIndexerSettings settings && settings.MultiLanguages.Any() && Parser.Parser.HasMultipleLanguages(releaseInfo.Title)) if (indexer?.Settings is IIndexerSettings settings && settings.MultiLanguages.Any() && Parser.Parser.HasMultipleLanguages(releaseInfo.Title))
{ {
// Use indexer setting for Multi-languages // 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());
}
} }
} }