1.0.0-rc3 rc
This commit is contained in:
@@ -22793,6 +22793,12 @@ class PipelineService extends EventEmitter {
|
|||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const readyMediaProfile = this.resolveMediaProfileForJob(job, {
|
||||||
|
encodePlan: planForConfirm
|
||||||
|
});
|
||||||
|
const confirmSettings = await settingsService.getEffectiveSettingsMap(readyMediaProfile);
|
||||||
|
const settingsExtraArgsForProfile = String(confirmSettings?.handbrake_extra_args || '').trim();
|
||||||
|
|
||||||
// Resolve user preset: explicit payload wins, otherwise preserve currently selected preset from encode plan.
|
// Resolve user preset: explicit payload wins, otherwise preserve currently selected preset from encode plan.
|
||||||
const hasUserPresetIdField = Object.prototype.hasOwnProperty.call(options || {}, 'selectedUserPresetId');
|
const hasUserPresetIdField = Object.prototype.hasOwnProperty.call(options || {}, 'selectedUserPresetId');
|
||||||
const hasHandBrakePresetField = Object.prototype.hasOwnProperty.call(options || {}, 'selectedHandBrakePreset');
|
const hasHandBrakePresetField = Object.prototype.hasOwnProperty.call(options || {}, 'selectedHandBrakePreset');
|
||||||
@@ -22822,10 +22828,17 @@ class PipelineService extends EventEmitter {
|
|||||||
? {
|
? {
|
||||||
name: `HandBrake: ${rawHandBrakePreset}`,
|
name: `HandBrake: ${rawHandBrakePreset}`,
|
||||||
handbrakePreset: rawHandBrakePreset,
|
handbrakePreset: rawHandBrakePreset,
|
||||||
extraArgs: ''
|
extraArgs: settingsExtraArgsForProfile
|
||||||
}
|
}
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
if (!resolvedUserPreset && explicitPresetClearRequested && settingsExtraArgsForProfile) {
|
||||||
|
resolvedUserPreset = {
|
||||||
|
name: 'Settings CLI-Parameter',
|
||||||
|
handbrakePreset: null,
|
||||||
|
extraArgs: settingsExtraArgsForProfile
|
||||||
|
};
|
||||||
|
}
|
||||||
if (!resolvedUserPreset && !explicitPresetClearRequested) {
|
if (!resolvedUserPreset && !explicitPresetClearRequested) {
|
||||||
resolvedUserPreset = normalizeUserPresetForPlan(
|
resolvedUserPreset = normalizeUserPresetForPlan(
|
||||||
planForConfirm?.userPreset || encodePlan?.userPreset || null
|
planForConfirm?.userPreset || encodePlan?.userPreset || null
|
||||||
@@ -22850,10 +22863,6 @@ class PipelineService extends EventEmitter {
|
|||||||
reviewConfirmedAt: nowIso(),
|
reviewConfirmedAt: nowIso(),
|
||||||
userPreset: normalizeUserPresetForPlan(resolvedUserPreset)
|
userPreset: normalizeUserPresetForPlan(resolvedUserPreset)
|
||||||
};
|
};
|
||||||
const readyMediaProfile = this.resolveMediaProfileForJob(job, {
|
|
||||||
encodePlan: confirmedPlan
|
|
||||||
});
|
|
||||||
const confirmSettings = await settingsService.getEffectiveSettingsMap(readyMediaProfile);
|
|
||||||
const confirmedConverterMediaType = String(
|
const confirmedConverterMediaType = String(
|
||||||
confirmedPlan?.converterMediaType || encodePlan?.converterMediaType || ''
|
confirmedPlan?.converterMediaType || encodePlan?.converterMediaType || ''
|
||||||
).trim().toLowerCase();
|
).trim().toLowerCase();
|
||||||
@@ -22878,17 +22887,25 @@ class PipelineService extends EventEmitter {
|
|||||||
|| encodePlan?.selectors?.extraArgs
|
|| encodePlan?.selectors?.extraArgs
|
||||||
|| ''
|
|| ''
|
||||||
).trim();
|
).trim();
|
||||||
const effectivePresetName = String(
|
const effectivePresetName = explicitPresetClearRequested
|
||||||
|
? ''
|
||||||
|
: String(
|
||||||
resolvedUserPreset?.handbrakePreset
|
resolvedUserPreset?.handbrakePreset
|
||||||
|| rawHandBrakePreset
|
|| rawHandBrakePreset
|
||||||
|| planPresetName
|
|| planPresetName
|
||||||
|| confirmSettings?.handbrake_preset
|
|| confirmSettings?.handbrake_preset
|
||||||
|| ''
|
|| ''
|
||||||
).trim();
|
).trim();
|
||||||
const effectiveExtraArgs = String(
|
const effectiveExtraArgs = explicitPresetClearRequested
|
||||||
|
? String(
|
||||||
|
resolvedUserPreset?.extraArgs
|
||||||
|
|| settingsExtraArgsForProfile
|
||||||
|
|| ''
|
||||||
|
).trim()
|
||||||
|
: String(
|
||||||
resolvedUserPreset?.extraArgs
|
resolvedUserPreset?.extraArgs
|
||||||
|| planExtraArgs
|
|| planExtraArgs
|
||||||
|| confirmSettings?.handbrake_extra_args
|
|| settingsExtraArgsForProfile
|
||||||
|| ''
|
|| ''
|
||||||
).trim();
|
).trim();
|
||||||
if (requiresExplicitPreset && !effectivePresetName && !effectiveExtraArgs) {
|
if (requiresExplicitPreset && !effectivePresetName && !effectiveExtraArgs) {
|
||||||
|
|||||||
@@ -739,11 +739,15 @@ function buildHandBrakeCommandPreview({
|
|||||||
hasExplicitVariantSelection: normalizedSubtitleSelectionMode === 'variants'
|
hasExplicitVariantSelection: normalizedSubtitleSelectionMode === 'variants'
|
||||||
&& hasExplicitSelectedVariantSelection
|
&& hasExplicitSelectedVariantSelection
|
||||||
});
|
});
|
||||||
const subtitleTrackIds = resolvedSubtitleSelection.subtitleTrackIds.length > 0
|
const subtitleTrackIds = normalizedSubtitleSelectionMode === 'track_ids'
|
||||||
|
? normalizedSelectedSubtitleTrackIds
|
||||||
|
: (
|
||||||
|
resolvedSubtitleSelection.subtitleTrackIds.length > 0
|
||||||
? resolvedSubtitleSelection.subtitleTrackIds
|
? resolvedSubtitleSelection.subtitleTrackIds
|
||||||
: (hasExplicitSelectedVariantSelection
|
: (hasExplicitSelectedVariantSelection
|
||||||
? []
|
? []
|
||||||
: normalizedSelectedSubtitleTrackIds);
|
: normalizedSelectedSubtitleTrackIds)
|
||||||
|
);
|
||||||
const selectedSubtitleSet = new Set(normalizeTrackIdList(subtitleTrackIds).map((id) => String(id)));
|
const selectedSubtitleSet = new Set(normalizeTrackIdList(subtitleTrackIds).map((id) => String(id)));
|
||||||
const selectedSubtitleTracks = (Array.isArray(title?.subtitleTracks) ? title.subtitleTracks : []).filter((track) => {
|
const selectedSubtitleTracks = (Array.isArray(title?.subtitleTracks) ? title.subtitleTracks : []).filter((track) => {
|
||||||
const id = normalizeTrackId(track?.id);
|
const id = normalizeTrackId(track?.id);
|
||||||
@@ -787,7 +791,7 @@ function buildHandBrakeCommandPreview({
|
|||||||
if (subtitleDefaultTrackId !== null) {
|
if (subtitleDefaultTrackId !== null) {
|
||||||
overrideArgs.push(`--subtitle-default=${subtitleDefaultTrackId}`);
|
overrideArgs.push(`--subtitle-default=${subtitleDefaultTrackId}`);
|
||||||
}
|
}
|
||||||
if (resolvedSubtitleSelection.subtitleForcedTrackIndexes.length > 0) {
|
if (normalizedSubtitleSelectionMode !== 'track_ids' && resolvedSubtitleSelection.subtitleForcedTrackIndexes.length > 0) {
|
||||||
overrideArgs.push(`--subtitle-forced=${resolvedSubtitleSelection.subtitleForcedTrackIndexes.join(',')}`);
|
overrideArgs.push(`--subtitle-forced=${resolvedSubtitleSelection.subtitleForcedTrackIndexes.join(',')}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1617,6 +1621,8 @@ export default function MediaInfoReviewPanel({
|
|||||||
onUserPresetChange = null,
|
onUserPresetChange = null,
|
||||||
selectedHandBrakePreset = '',
|
selectedHandBrakePreset = '',
|
||||||
onHandBrakePresetChange = null,
|
onHandBrakePresetChange = null,
|
||||||
|
presetSelectionExplicitlyCleared = false,
|
||||||
|
onPresetTokenChange = null,
|
||||||
handBrakePresetOptions = [],
|
handBrakePresetOptions = [],
|
||||||
comparisonReviewItems = [],
|
comparisonReviewItems = [],
|
||||||
topContent = null
|
topContent = null
|
||||||
@@ -1922,24 +1928,31 @@ export default function MediaInfoReviewPanel({
|
|||||||
const isHandBrakePresetActive = !isUserPresetActive && Boolean(trimmedHandBrakePreset);
|
const isHandBrakePresetActive = !isUserPresetActive && Boolean(trimmedHandBrakePreset);
|
||||||
const settingsPresetFallback = String(review?.selectors?.preset || '').trim();
|
const settingsPresetFallback = String(review?.selectors?.preset || '').trim();
|
||||||
const settingsExtraArgsFallback = String(review?.selectors?.extraArgs || '').trim();
|
const settingsExtraArgsFallback = String(review?.selectors?.extraArgs || '').trim();
|
||||||
const usesSettingsFallbackOnly = !isUserPresetActive && !isHandBrakePresetActive;
|
const hasNoExplicitPresetSelected = !isUserPresetActive && !isHandBrakePresetActive;
|
||||||
const hasSettingsPresetFallback = Boolean(settingsPresetFallback);
|
const effectiveSettingsPresetFallback = presetSelectionExplicitlyCleared ? '' : settingsPresetFallback;
|
||||||
|
const hasSettingsPresetFallback = Boolean(effectiveSettingsPresetFallback);
|
||||||
const hasSettingsExtraArgsFallback = Boolean(settingsExtraArgsFallback);
|
const hasSettingsExtraArgsFallback = Boolean(settingsExtraArgsFallback);
|
||||||
const hasInvalidPresetConfig = usesSettingsFallbackOnly
|
const hasInvalidPresetConfig = hasNoExplicitPresetSelected
|
||||||
&& !hasSettingsPresetFallback
|
&& !hasSettingsPresetFallback
|
||||||
&& !hasSettingsExtraArgsFallback;
|
&& !hasSettingsExtraArgsFallback;
|
||||||
const hasSettingsArgsOnlyConfig = usesSettingsFallbackOnly
|
const hasSettingsArgsOnlyConfig = hasNoExplicitPresetSelected
|
||||||
&& !hasSettingsPresetFallback
|
&& !hasSettingsPresetFallback
|
||||||
&& hasSettingsExtraArgsFallback;
|
&& hasSettingsExtraArgsFallback;
|
||||||
const effectivePresetOverride = isUserPresetActive
|
const effectivePresetOverride = isUserPresetActive
|
||||||
? { handbrakePreset: selectedUserPreset.handbrakePreset || '', extraArgs: selectedUserPreset.extraArgs || '' }
|
? { handbrakePreset: selectedUserPreset.handbrakePreset || '', extraArgs: selectedUserPreset.extraArgs || '' }
|
||||||
: (isHandBrakePresetActive ? { handbrakePreset: trimmedHandBrakePreset, extraArgs: '' } : null);
|
: (isHandBrakePresetActive
|
||||||
|
? { handbrakePreset: trimmedHandBrakePreset, extraArgs: settingsExtraArgsFallback }
|
||||||
|
: (presetSelectionExplicitlyCleared
|
||||||
|
? { handbrakePreset: '', extraArgs: settingsExtraArgsFallback }
|
||||||
|
: null));
|
||||||
const effectiveAudioSelector = effectivePresetOverride?.extraArgs
|
const effectiveAudioSelector = effectivePresetOverride?.extraArgs
|
||||||
? parseAudioSelectorFromArgs(effectivePresetOverride.extraArgs, review?.selectors?.audio)
|
? parseAudioSelectorFromArgs(effectivePresetOverride.extraArgs, review?.selectors?.audio)
|
||||||
: (review?.selectors?.audio || null);
|
: (review?.selectors?.audio || null);
|
||||||
const activePresetDisplayLabel = isUserPresetActive
|
const activePresetDisplayLabel = isUserPresetActive
|
||||||
? 'User-Preset'
|
? 'User-Preset'
|
||||||
: ((isHandBrakePresetActive || String(presetLabel || '').trim()) ? 'HandBrake-Preset' : '(kein Preset)');
|
: (isHandBrakePresetActive
|
||||||
|
? 'HandBrake-Preset'
|
||||||
|
: (presetSelectionExplicitlyCleared ? 'Kein Preset' : (String(presetLabel || '').trim() ? 'HandBrake-Preset' : '(kein Preset)')));
|
||||||
const minLengthMinutes = Number(review?.minLengthMinutes);
|
const minLengthMinutes = Number(review?.minLengthMinutes);
|
||||||
const minLengthLabel = Number.isFinite(minLengthMinutes)
|
const minLengthLabel = Number.isFinite(minLengthMinutes)
|
||||||
? (minLengthMinutes <= 0
|
? (minLengthMinutes <= 0
|
||||||
@@ -2240,6 +2253,9 @@ export default function MediaInfoReviewPanel({
|
|||||||
optionDisabled="disabled"
|
optionDisabled="disabled"
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
const value = String(e?.value || '').trim();
|
const value = String(e?.value || '').trim();
|
||||||
|
if (typeof onPresetTokenChange === 'function') {
|
||||||
|
onPresetTokenChange(value);
|
||||||
|
}
|
||||||
if (value.startsWith('user:')) {
|
if (value.startsWith('user:')) {
|
||||||
const presetId = Number(value.slice(5));
|
const presetId = Number(value.slice(5));
|
||||||
if (typeof onUserPresetChange === 'function') {
|
if (typeof onUserPresetChange === 'function') {
|
||||||
|
|||||||
@@ -1679,6 +1679,7 @@ export default function PipelineStatusCard({
|
|||||||
const [selectedUserPresetId, setSelectedUserPresetId] = useState(null);
|
const [selectedUserPresetId, setSelectedUserPresetId] = useState(null);
|
||||||
const [handBrakePresetOptions, setHandBrakePresetOptions] = useState([]);
|
const [handBrakePresetOptions, setHandBrakePresetOptions] = useState([]);
|
||||||
const [selectedHandBrakePreset, setSelectedHandBrakePreset] = useState('');
|
const [selectedHandBrakePreset, setSelectedHandBrakePreset] = useState('');
|
||||||
|
const [presetSelectionExplicitlyCleared, setPresetSelectionExplicitlyCleared] = useState(false);
|
||||||
const [selectedOutputFormat, setSelectedOutputFormat] = useState('mkv');
|
const [selectedOutputFormat, setSelectedOutputFormat] = useState('mkv');
|
||||||
const [converterConfigSaving, setConverterConfigSaving] = useState(false);
|
const [converterConfigSaving, setConverterConfigSaving] = useState(false);
|
||||||
const [converterConfigError, setConverterConfigError] = useState(null);
|
const [converterConfigError, setConverterConfigError] = useState(null);
|
||||||
@@ -1886,6 +1887,7 @@ export default function PipelineStatusCard({
|
|||||||
setSelectedOutputFormat(nextOutputFormat);
|
setSelectedOutputFormat(nextOutputFormat);
|
||||||
const userPresetId = Number(mediaInfoReview?.userPreset?.id);
|
const userPresetId = Number(mediaInfoReview?.userPreset?.id);
|
||||||
const settingsPresetName = String(mediaInfoReview?.selectors?.preset || '').trim();
|
const settingsPresetName = String(mediaInfoReview?.selectors?.preset || '').trim();
|
||||||
|
setPresetSelectionExplicitlyCleared(false);
|
||||||
if (Number.isFinite(userPresetId) && userPresetId > 0) {
|
if (Number.isFinite(userPresetId) && userPresetId > 0) {
|
||||||
setSelectedUserPresetId(Math.trunc(userPresetId));
|
setSelectedUserPresetId(Math.trunc(userPresetId));
|
||||||
setSelectedHandBrakePreset('');
|
setSelectedHandBrakePreset('');
|
||||||
@@ -1928,6 +1930,7 @@ export default function PipelineStatusCard({
|
|||||||
setPostEncodeItems([]);
|
setPostEncodeItems([]);
|
||||||
setSelectedUserPresetId(null);
|
setSelectedUserPresetId(null);
|
||||||
setSelectedHandBrakePreset('');
|
setSelectedHandBrakePreset('');
|
||||||
|
setPresetSelectionExplicitlyCleared(false);
|
||||||
}, [mediaInfoReview, retryJobId]);
|
}, [mediaInfoReview, retryJobId]);
|
||||||
|
|
||||||
const resolveEffectiveSelectedTitleIds = (reviewTitles = []) => {
|
const resolveEffectiveSelectedTitleIds = (reviewTitles = []) => {
|
||||||
@@ -2344,8 +2347,9 @@ export default function PipelineStatusCard({
|
|||||||
const settingsPresetFallback = String(mediaInfoReview?.selectors?.preset || '').trim();
|
const settingsPresetFallback = String(mediaInfoReview?.selectors?.preset || '').trim();
|
||||||
const settingsExtraArgsFallback = String(mediaInfoReview?.selectors?.extraArgs || '').trim();
|
const settingsExtraArgsFallback = String(mediaInfoReview?.selectors?.extraArgs || '').trim();
|
||||||
const hasSelectedPreset = Boolean(selectedUserPresetId) || Boolean(trimmedHandBrakePreset);
|
const hasSelectedPreset = Boolean(selectedUserPresetId) || Boolean(trimmedHandBrakePreset);
|
||||||
|
const hasSettingsPresetForValidation = !presetSelectionExplicitlyCleared && Boolean(settingsPresetFallback);
|
||||||
const hasEffectiveSelectedPreset = hasSelectedPreset
|
const hasEffectiveSelectedPreset = hasSelectedPreset
|
||||||
|| Boolean(settingsPresetFallback)
|
|| hasSettingsPresetForValidation
|
||||||
|| Boolean(settingsExtraArgsFallback);
|
|| Boolean(settingsExtraArgsFallback);
|
||||||
const converterMediaType = String(mediaInfoReview?.converterMediaType || 'video').trim().toLowerCase() || 'video';
|
const converterMediaType = String(mediaInfoReview?.converterMediaType || 'video').trim().toLowerCase() || 'video';
|
||||||
const showConverterConfig = jobMediaProfile === 'converter' && converterMediaType !== 'audio';
|
const showConverterConfig = jobMediaProfile === 'converter' && converterMediaType !== 'audio';
|
||||||
@@ -4342,7 +4346,7 @@ export default function PipelineStatusCard({
|
|||||||
<div className="playlist-decision-block">
|
<div className="playlist-decision-block">
|
||||||
<h3>Preset-Auswahl erforderlich</h3>
|
<h3>Preset-Auswahl erforderlich</h3>
|
||||||
<small>
|
<small>
|
||||||
Es ist weder ein User-Preset noch ein Settings-Preset gesetzt. Bitte ein Preset auswählen, bevor das Encoding starten kann.
|
Es ist kein gültiges Preset/CLI-Setup aktiv. Bitte Preset auswählen oder gültige Extra-Args hinterlegen.
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
@@ -4568,6 +4572,11 @@ export default function PipelineStatusCard({
|
|||||||
setSelectedUserPresetId(null);
|
setSelectedUserPresetId(null);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
presetSelectionExplicitlyCleared={presetSelectionExplicitlyCleared}
|
||||||
|
onPresetTokenChange={showConverterConfig || multipartSettingsLocked ? null : (token) => {
|
||||||
|
const normalizedToken = String(token || '').trim().toLowerCase();
|
||||||
|
setPresetSelectionExplicitlyCleared(normalizedToken === 'none');
|
||||||
|
}}
|
||||||
handBrakePresetOptions={handBrakePresetOptions}
|
handBrakePresetOptions={handBrakePresetOptions}
|
||||||
allowEncodeItemSelection={allowEncodeItemSelectionInReview}
|
allowEncodeItemSelection={allowEncodeItemSelectionInReview}
|
||||||
comparisonReviewItems={multipartComparisonReviews}
|
comparisonReviewItems={multipartComparisonReviews}
|
||||||
|
|||||||
Reference in New Issue
Block a user