Preserve subtitle default unless disabled

This commit is contained in:
Emby Toolbox 2026-05-12 22:10:49 +05:00
parent f5c6cc7438
commit 726408a44f

View File

@ -409,76 +409,7 @@ public static class TrackOverrideSeeder
var subtitleEntries = taskOverride.TrackOverrides
.Where(t => t.StreamKind == MediaStreamKind.Subtitle)
.ToList();
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)
if (!disableSubtitleDefault)
{
return;
}
@ -487,9 +418,6 @@ public static class TrackOverrideSeeder
{
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)