Preserve subtitle default unless disabled
This commit is contained in:
parent
f5c6cc7438
commit
726408a44f
@ -409,76 +409,7 @@ public static class TrackOverrideSeeder
|
|||||||
var subtitleEntries = taskOverride.TrackOverrides
|
var subtitleEntries = taskOverride.TrackOverrides
|
||||||
.Where(t => t.StreamKind == MediaStreamKind.Subtitle)
|
.Where(t => t.StreamKind == MediaStreamKind.Subtitle)
|
||||||
.ToList();
|
.ToList();
|
||||||
if (disableSubtitleDefault)
|
if (!disableSubtitleDefault)
|
||||||
{
|
|
||||||
foreach (var entry in subtitleEntries)
|
|
||||||
{
|
|
||||||
entry.Default = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var forcedCandidates = media.SubtitleStreams
|
|
||||||
.Where(s => s.IsForced)
|
|
||||||
.OrderBy(s => s.Index)
|
|
||||||
.ToList();
|
|
||||||
var embeddedSubtitleEntries = subtitleEntries
|
|
||||||
.Where(t => t.Source == SourceKind.Embedded && t.Action != TrackActionKind.Remove)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (forcedCandidates.Count > 0)
|
|
||||||
{
|
|
||||||
var selectedForcedIndex = forcedCandidates[0].Index;
|
|
||||||
if (forcedCandidates.Count > 1)
|
|
||||||
{
|
|
||||||
logging?.Info("Найдено несколько forced-субтитров, default установлен только для первой дорожки.", "subtitle.forced");
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var entry in subtitleEntries)
|
|
||||||
{
|
|
||||||
entry.Default = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var selectedEntry = embeddedSubtitleEntries.FirstOrDefault(t => t.StreamIndex == selectedForcedIndex);
|
|
||||||
if (selectedEntry is null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
selectedEntry.Default = true;
|
|
||||||
logging?.Info($"subtitle default set to forced track: #{selectedEntry.StreamIndex}", "subtitle.forced");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultEmbeddedAudio = taskOverride.TrackOverrides
|
|
||||||
.FirstOrDefault(t => t.Source == SourceKind.Embedded
|
|
||||||
&& t.StreamKind == MediaStreamKind.Audio
|
|
||||||
&& t.Action != TrackActionKind.Remove
|
|
||||||
&& t.Default == true);
|
|
||||||
var defaultAudioIsRus = IsRussianLanguage(defaultEmbeddedAudio?.Language);
|
|
||||||
|
|
||||||
var rusFullSubtitleEntries = embeddedSubtitleEntries
|
|
||||||
.Where(t => IsRussianLanguage(t.Language))
|
|
||||||
.Where(t =>
|
|
||||||
{
|
|
||||||
var stream = media.SubtitleStreams.FirstOrDefault(s => s.Index == t.StreamIndex);
|
|
||||||
return stream is null || !stream.IsForced;
|
|
||||||
})
|
|
||||||
.OrderBy(t => t.StreamIndex)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (defaultAudioIsRus)
|
|
||||||
{
|
|
||||||
foreach (var entry in rusFullSubtitleEntries)
|
|
||||||
{
|
|
||||||
entry.Default = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rusFullSubtitleEntries.Count == 0)
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -487,9 +418,6 @@ public static class TrackOverrideSeeder
|
|||||||
{
|
{
|
||||||
entry.Default = false;
|
entry.Default = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
rusFullSubtitleEntries[0].Default = true;
|
|
||||||
logging?.Info($"subtitle default set to first RUS full track: #{rusFullSubtitleEntries[0].StreamIndex}", "subtitle.forced");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool IsRussianLanguage(string? language)
|
private static bool IsRussianLanguage(string? language)
|
||||||
@ -502,4 +430,4 @@ public static class TrackOverrideSeeder
|
|||||||
var normalized = language.Trim().ToLowerInvariant();
|
var normalized = language.Trim().ToLowerInvariant();
|
||||||
return normalized is "ru" or "rus" or "russian" or "рус" or "русский";
|
return normalized is "ru" or "rus" or "russian" or "рус" or "русский";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user