0.12.0-16 misc fixes

This commit is contained in:
2026-03-30 14:37:23 +00:00
parent 76b020d5c0
commit 5284dd2a43
30 changed files with 6955 additions and 896 deletions
+44 -2
View File
@@ -156,6 +156,40 @@ function normalizeTrackIds(rawList) {
return output;
}
function normalizeTrackIdSequence(rawList, options = {}) {
const list = Array.isArray(rawList) ? rawList : [];
const dedupe = options?.dedupe !== false;
const seen = new Set();
const output = [];
for (const item of list) {
const value = Number(item);
if (!Number.isFinite(value) || value <= 0) {
continue;
}
const normalized = String(Math.trunc(value));
if (dedupe && seen.has(normalized)) {
continue;
}
if (dedupe) {
seen.add(normalized);
}
output.push(normalized);
}
return output;
}
function normalizePositiveIndexes(rawList, maxValue = null) {
const values = normalizeTrackIds(rawList)
.map((item) => Number(item))
.filter((value) => Number.isFinite(value) && value > 0)
.map((value) => Math.trunc(value));
if (!Number.isFinite(maxValue) || maxValue <= 0) {
return values;
}
const limit = Math.trunc(maxValue);
return values.filter((value) => value <= limit);
}
function normalizeNonNegativeInteger(rawValue) {
if (rawValue === null || rawValue === undefined) {
return null;
@@ -1209,10 +1243,14 @@ class SettingsService {
}
const audioTrackIds = normalizeTrackIds(rawSelection.audioTrackIds);
const subtitleTrackIds = normalizeTrackIds(rawSelection.subtitleTrackIds);
const subtitleTrackIds = normalizeTrackIdSequence(rawSelection.subtitleTrackIds, { dedupe: false });
const subtitleBurnTrackId = normalizeTrackIds([rawSelection.subtitleBurnTrackId])[0] || null;
const subtitleDefaultTrackId = normalizeTrackIds([rawSelection.subtitleDefaultTrackId])[0] || null;
const subtitleForcedTrackId = normalizeTrackIds([rawSelection.subtitleForcedTrackId])[0] || null;
const subtitleForcedTrackIndexes = normalizePositiveIndexes(
rawSelection.subtitleForcedTrackIndexes,
subtitleTrackIds.length
);
const subtitleForcedOnly = Boolean(rawSelection.subtitleForcedOnly);
const filteredExtra = removeSelectionArgs(extra);
const overrideArgs = [
@@ -1227,7 +1265,9 @@ class SettingsService {
if (subtitleDefaultTrackId !== null) {
overrideArgs.push(`--subtitle-default=${subtitleDefaultTrackId}`);
}
if (subtitleForcedTrackId !== null) {
if (subtitleForcedTrackIndexes.length > 0) {
overrideArgs.push(`--subtitle-forced=${subtitleForcedTrackIndexes.join(',')}`);
} else if (subtitleForcedTrackId !== null) {
overrideArgs.push(`--subtitle-forced=${subtitleForcedTrackId}`);
} else if (subtitleForcedOnly) {
overrideArgs.push('--subtitle-forced');
@@ -1245,6 +1285,7 @@ class SettingsService {
subtitleTrackIds,
subtitleBurnTrackId,
subtitleDefaultTrackId,
subtitleForcedTrackIndexes,
subtitleForcedTrackId,
subtitleForcedOnly
}
@@ -1258,6 +1299,7 @@ class SettingsService {
subtitleTrackIds,
subtitleBurnTrackId,
subtitleDefaultTrackId,
subtitleForcedTrackIndexes,
subtitleForcedTrackId,
subtitleForcedOnly
}