process missing language as und (#2081)

This commit is contained in:
Jason Dove
2025-06-27 14:45:30 +00:00
committed by GitHub
parent 4d83dc019c
commit 6e2c19d354
2 changed files with 42 additions and 9 deletions
@@ -67,6 +67,31 @@ items:
}
}
[Test]
public async Task Should_Select_und_Audio_Missing_Language()
{
const string YAML =
"""
---
items:
- audio_language: ["und"]
""";
var streamSelector = new CustomStreamSelector(
new FakeLocalFileSystem([new FakeFileEntry(TestFileName) { Contents = YAML }]),
new NullLogger<CustomStreamSelector>());
StreamSelectorResult result = await streamSelector.SelectStreams(_channel, _audioVersion, _subtitles);
result.AudioStream.IsSome.ShouldBeTrue();
foreach (MediaStream audioStream in result.AudioStream)
{
audioStream.Index.ShouldBe(3);
audioStream.Language.ShouldBeNullOrWhiteSpace();
}
}
[Test]
public async Task Should_Select_eng_Audio_Exact_Match_Multiple_Audio_Languages()
{
@@ -690,7 +715,13 @@ items:
Channels = 6,
Language = englishLanguage,
Title = "Movie Title",
Default = true
},
new MediaStream
{
Index = 3,
MediaStreamKind = MediaStreamKind.Audio,
Channels = 2,
Title = "Who Knows",
}
]
};
+10 -8
View File
@@ -43,7 +43,8 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
foreach (MediaStream audioStream in audioStreams.ToList())
{
var matches = false;
string safeTitle = audioStream.Title ?? string.Empty;
string safeTitle = (audioStream.Title ?? string.Empty).ToLowerInvariant();
string safeLanguage = (audioStream.Language ?? "und").ToLowerInvariant();
if (streamSelectorItem.AudioLanguages.Count > 0)
{
@@ -60,7 +61,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
matches = matches || FileSystemName.MatchesSimpleExpression(
audioLanguage.ToLowerInvariant(),
audioStream.Language.ToLowerInvariant());
safeLanguage);
// store lang index for prioritizing later
if (matches && candidateAudioStreams[audioStream] == int.MaxValue)
@@ -105,7 +106,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
logger.LogDebug(
"Audio stream {@Stream} does not match selector item {@SelectorItem}",
new { audioStream.Language, audioStream.Title },
new { Language = safeLanguage, Title = safeTitle },
streamSelectorItem);
}
else
@@ -114,7 +115,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
logger.LogDebug(
"Audio stream {@Stream} matches selector item {@SelectorItem}",
new { audioStream.Language, audioStream.Title },
new { Language = safeLanguage, Title = safeTitle },
streamSelectorItem);
}
}
@@ -130,7 +131,8 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
foreach (Subtitle subtitle in allSubtitles.ToList())
{
var matches = false;
string safeTitle = subtitle.Title ?? string.Empty;
string safeTitle = (subtitle.Title ?? string.Empty).ToLowerInvariant();
string safeLanguage = (subtitle.Language ?? "und").ToLowerInvariant();
if (streamSelectorItem.SubtitleLanguages.Count > 0)
{
@@ -147,7 +149,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
matches = matches || FileSystemName.MatchesSimpleExpression(
subtitleLanguage,
subtitle.Language);
safeLanguage);
// store lang index for prioritizing later
if (matches && candidateSubtitles[subtitle] == int.MaxValue)
@@ -192,7 +194,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
logger.LogDebug(
"Subtitle {@Subtitle} does not match selector item {@SelectorItem}",
new { subtitle.Language, subtitle.Title },
new { Language = safeLanguage, Title = safeTitle },
streamSelectorItem);
}
else
@@ -201,7 +203,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
logger.LogDebug(
"Subtitle {@Subtitle} matches selector item {@SelectorItem}",
new { subtitle.Language, subtitle.Title },
new { Language = safeLanguage, Title = safeTitle },
streamSelectorItem);
}
}