0.13.1-6 Series Fix
This commit is contained in:
@@ -366,6 +366,7 @@ router.post(
|
||||
providerId,
|
||||
tmdbId,
|
||||
metadataKind,
|
||||
workflowKind,
|
||||
seasonNumber,
|
||||
seasonName,
|
||||
episodeCount,
|
||||
@@ -393,6 +394,7 @@ router.post(
|
||||
metadataProvider,
|
||||
providerId,
|
||||
tmdbId,
|
||||
workflowKind,
|
||||
seasonNumber,
|
||||
discNumber
|
||||
});
|
||||
@@ -411,6 +413,7 @@ router.post(
|
||||
providerId,
|
||||
tmdbId,
|
||||
metadataKind,
|
||||
workflowKind,
|
||||
seasonNumber,
|
||||
seasonName,
|
||||
episodeCount,
|
||||
|
||||
@@ -1159,6 +1159,20 @@ function normalizePositiveIntegerOrNull(value) {
|
||||
return Math.trunc(parsed);
|
||||
}
|
||||
|
||||
function normalizeDvdMetadataWorkflowKind(value) {
|
||||
const raw = String(value || '').trim().toLowerCase();
|
||||
if (!raw) {
|
||||
return null;
|
||||
}
|
||||
if (['film', 'movie', 'feature'].includes(raw)) {
|
||||
return 'film';
|
||||
}
|
||||
if (['series', 'tv', 'season', 'episode'].includes(raw)) {
|
||||
return 'series';
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function resolveSeriesAssignmentEpisodeSpan(assignment = null) {
|
||||
const source = assignment && typeof assignment === 'object' ? assignment : {};
|
||||
const start = normalizePositiveIntegerOrNull(
|
||||
@@ -1313,6 +1327,17 @@ function extractSelectedMetadataFromMakemkvInfo(makemkvInfo = {}) {
|
||||
function hasSeriesMetadataSignals(selectedMetadata = {}, analyzeContext = {}) {
|
||||
const metadata = selectedMetadata && typeof selectedMetadata === 'object' ? selectedMetadata : {};
|
||||
const analyze = analyzeContext && typeof analyzeContext === 'object' ? analyzeContext : {};
|
||||
const workflowKind = normalizeDvdMetadataWorkflowKind(
|
||||
metadata.workflowKind
|
||||
|| analyze.workflowKind
|
||||
|| null
|
||||
);
|
||||
if (workflowKind === 'film') {
|
||||
return false;
|
||||
}
|
||||
if (workflowKind === 'series') {
|
||||
return true;
|
||||
}
|
||||
const metadataKind = String(metadata.metadataKind || analyze.metadataKind || '').trim().toLowerCase();
|
||||
const seasonNumber = normalizePositiveNumberOrNull(
|
||||
metadata.seasonNumber ?? analyze?.seriesLookupHint?.seasonNumber ?? null
|
||||
@@ -5118,6 +5143,7 @@ class HistoryService {
|
||||
};
|
||||
const requestedProviderRaw = String(payload.metadataProvider || '').trim().toLowerCase();
|
||||
const requestedTmdbId = parseTmdbId(payload?.tmdbId ?? payload?.providerId ?? null);
|
||||
const requestedWorkflowKind = normalizeDvdMetadataWorkflowKind(payload?.workflowKind);
|
||||
const metadataProvider = requestedProviderRaw === 'themoviedb'
|
||||
? 'tmdb'
|
||||
: (requestedProviderRaw || (requestedTmdbId !== null ? 'tmdb' : 'omdb'));
|
||||
@@ -5337,6 +5363,7 @@ class HistoryService {
|
||||
year,
|
||||
imdbId,
|
||||
poster: posterUrl,
|
||||
workflowKind: 'series',
|
||||
metadataProvider: 'tmdb',
|
||||
providerId,
|
||||
tmdbId: effectiveTmdbId,
|
||||
@@ -5356,6 +5383,7 @@ class HistoryService {
|
||||
: {};
|
||||
const nextAnalyzeContext = {
|
||||
...analyzeContext,
|
||||
workflowKind: 'series',
|
||||
metadataProvider: 'tmdb',
|
||||
metadataKind,
|
||||
selectedMetadata: {
|
||||
@@ -5445,24 +5473,68 @@ class HistoryService {
|
||||
const imdbId = omdb?.imdbId || imdbIdInput || job.imdb_id || null;
|
||||
const posterUrl = omdb?.poster || manualPoster || job.poster_url || null;
|
||||
const selectedFromOmdb = omdb ? 1 : Number(payload.fromOmdb ? 1 : 0);
|
||||
const resolvedJobMediaType = inferMediaType(
|
||||
job,
|
||||
makemkvInfo,
|
||||
job?.mediainfo_info_json,
|
||||
job?.encode_plan_json,
|
||||
job?.handbrake_info_json
|
||||
);
|
||||
const shouldUseFilmWorkflow = resolvedJobMediaType === 'dvd' && metadataProvider === 'omdb';
|
||||
const existingWorkflowKind = normalizeDvdMetadataWorkflowKind(
|
||||
existingSelectedMetadata?.workflowKind
|
||||
|| analyzeContext?.workflowKind
|
||||
|| null
|
||||
);
|
||||
const effectiveWorkflowKind = shouldUseFilmWorkflow
|
||||
? 'film'
|
||||
: (requestedWorkflowKind || existingWorkflowKind);
|
||||
const nextSelectedMetadata = {
|
||||
...(existingSelectedMetadata && typeof existingSelectedMetadata === 'object' ? existingSelectedMetadata : {}),
|
||||
title,
|
||||
year,
|
||||
imdbId,
|
||||
poster: posterUrl,
|
||||
metadataProvider: 'omdb'
|
||||
metadataProvider: 'omdb',
|
||||
...(effectiveWorkflowKind ? { workflowKind: effectiveWorkflowKind } : {}),
|
||||
...(shouldUseFilmWorkflow
|
||||
? {
|
||||
providerId: null,
|
||||
tmdbId: null,
|
||||
metadataKind: 'movie',
|
||||
seasonNumber: null,
|
||||
seasonName: null,
|
||||
episodeCount: 0,
|
||||
episodes: [],
|
||||
discNumber: null,
|
||||
tmdbDetails: null
|
||||
}
|
||||
: {})
|
||||
};
|
||||
const existingAnalyzeSelected = analyzeContext?.selectedMetadata && typeof analyzeContext.selectedMetadata === 'object'
|
||||
? analyzeContext.selectedMetadata
|
||||
: {};
|
||||
const existingSeriesLookupHint = analyzeContext?.seriesLookupHint && typeof analyzeContext.seriesLookupHint === 'object'
|
||||
? analyzeContext.seriesLookupHint
|
||||
: {};
|
||||
const nextAnalyzeContext = {
|
||||
...analyzeContext,
|
||||
...(effectiveWorkflowKind ? { workflowKind: effectiveWorkflowKind } : {}),
|
||||
metadataProvider: 'omdb',
|
||||
...(shouldUseFilmWorkflow ? { metadataKind: 'movie' } : {}),
|
||||
selectedMetadata: {
|
||||
...existingAnalyzeSelected,
|
||||
...nextSelectedMetadata
|
||||
}
|
||||
},
|
||||
...(shouldUseFilmWorkflow
|
||||
? {
|
||||
seriesLookupHint: {
|
||||
...existingSeriesLookupHint,
|
||||
seasonNumber: null,
|
||||
discNumber: null
|
||||
}
|
||||
}
|
||||
: {})
|
||||
};
|
||||
const topLevelSelected = makemkvInfo?.selectedMetadata && typeof makemkvInfo.selectedMetadata === 'object'
|
||||
? makemkvInfo.selectedMetadata
|
||||
@@ -5483,7 +5555,14 @@ class HistoryService {
|
||||
poster_url: posterUrl,
|
||||
omdb_json: omdb?.raw ? JSON.stringify(omdb.raw) : (job.omdb_json || null),
|
||||
selected_from_omdb: selectedFromOmdb,
|
||||
makemkv_info_json: JSON.stringify(nextMakemkvInfo)
|
||||
makemkv_info_json: JSON.stringify(nextMakemkvInfo),
|
||||
...(shouldUseFilmWorkflow
|
||||
? {
|
||||
parent_job_id: null,
|
||||
job_kind: 'dvd',
|
||||
media_type: 'dvd'
|
||||
}
|
||||
: {})
|
||||
});
|
||||
|
||||
// Bild herunterladen, in persistenten Ordner verschieben und poster_url aktualisieren
|
||||
|
||||
@@ -117,6 +117,20 @@ function normalizePositiveInteger(value) {
|
||||
return Math.trunc(parsed);
|
||||
}
|
||||
|
||||
function normalizeDvdMetadataWorkflowKind(value) {
|
||||
const raw = String(value || '').trim().toLowerCase();
|
||||
if (!raw) {
|
||||
return null;
|
||||
}
|
||||
if (['film', 'movie', 'feature'].includes(raw)) {
|
||||
return 'film';
|
||||
}
|
||||
if (['series', 'tv', 'season', 'episode'].includes(raw)) {
|
||||
return 'series';
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function resolveSelectedMetadataForJob(job = null, analyzeContext = null, activeContext = null) {
|
||||
const analyzeSelectedMetadata = analyzeContext?.selectedMetadata && typeof analyzeContext.selectedMetadata === 'object'
|
||||
? analyzeContext.selectedMetadata
|
||||
@@ -128,6 +142,12 @@ function resolveSelectedMetadataForJob(job = null, analyzeContext = null, active
|
||||
...analyzeSelectedMetadata,
|
||||
...activeSelectedMetadata
|
||||
};
|
||||
const workflowKind = normalizeDvdMetadataWorkflowKind(
|
||||
merged.workflowKind
|
||||
|| analyzeContext?.workflowKind
|
||||
|| activeContext?.workflowKind
|
||||
|| null
|
||||
);
|
||||
|
||||
return {
|
||||
...merged,
|
||||
@@ -135,6 +155,7 @@ function resolveSelectedMetadataForJob(job = null, analyzeContext = null, active
|
||||
year: Number(merged.year ?? job?.year ?? 0) || null,
|
||||
imdbId: String(merged.imdbId || job?.imdb_id || '').trim() || null,
|
||||
poster: String(merged.poster || job?.poster_url || '').trim() || null,
|
||||
...(workflowKind ? { workflowKind } : {}),
|
||||
metadataProvider: String(
|
||||
merged.metadataProvider
|
||||
|| analyzeContext?.metadataProvider
|
||||
@@ -152,6 +173,17 @@ function isSeriesDvdMetadataSelection(mediaProfile, selectedMetadata = {}, analy
|
||||
const metadata = selectedMetadata && typeof selectedMetadata === 'object'
|
||||
? selectedMetadata
|
||||
: {};
|
||||
const workflowKind = normalizeDvdMetadataWorkflowKind(
|
||||
metadata.workflowKind
|
||||
|| analyzeContext?.workflowKind
|
||||
|| null
|
||||
);
|
||||
if (workflowKind === 'film') {
|
||||
return false;
|
||||
}
|
||||
if (workflowKind === 'series') {
|
||||
return true;
|
||||
}
|
||||
const provider = String(
|
||||
metadata.metadataProvider
|
||||
|| analyzeContext?.metadataProvider
|
||||
@@ -13674,6 +13706,7 @@ class PipelineService extends EventEmitter {
|
||||
providerId = null,
|
||||
tmdbId = null,
|
||||
metadataKind = null,
|
||||
workflowKind = null,
|
||||
seasonNumber = null,
|
||||
seasonName = null,
|
||||
episodeCount = null,
|
||||
@@ -13694,6 +13727,7 @@ class PipelineService extends EventEmitter {
|
||||
metadataProvider,
|
||||
providerId,
|
||||
tmdbId,
|
||||
workflowKind,
|
||||
seasonNumber,
|
||||
discNumber
|
||||
});
|
||||
@@ -14009,28 +14043,46 @@ class PipelineService extends EventEmitter {
|
||||
const posterValue = poster === undefined
|
||||
? (job.poster_url || null)
|
||||
: (poster || null);
|
||||
const effectiveMetadataProvider = String(
|
||||
let effectiveMetadataProvider = String(
|
||||
metadataProvider
|
||||
|| mkInfo?.analyzeContext?.metadataProvider
|
||||
|| 'omdb'
|
||||
).trim().toLowerCase() || 'omdb';
|
||||
const effectiveProviderId = String(
|
||||
const requestedWorkflowKind = normalizeDvdMetadataWorkflowKind(workflowKind);
|
||||
const existingWorkflowKind = normalizeDvdMetadataWorkflowKind(
|
||||
mkInfo?.analyzeContext?.selectedMetadata?.workflowKind
|
||||
|| mkInfo?.analyzeContext?.workflowKind
|
||||
|| mkInfo?.selectedMetadata?.workflowKind
|
||||
|| null
|
||||
);
|
||||
const providerWorkflowKind = effectiveMetadataProvider === 'tmdb'
|
||||
? 'series'
|
||||
: (effectiveMetadataProvider === 'omdb' ? 'film' : null);
|
||||
const effectiveWorkflowKind = requestedWorkflowKind || providerWorkflowKind || existingWorkflowKind;
|
||||
if (mediaProfile === 'dvd') {
|
||||
if (effectiveWorkflowKind === 'series') {
|
||||
effectiveMetadataProvider = 'tmdb';
|
||||
} else if (effectiveWorkflowKind === 'film') {
|
||||
effectiveMetadataProvider = 'omdb';
|
||||
}
|
||||
}
|
||||
let effectiveProviderId = String(
|
||||
providerId
|
||||
|| mkInfo?.analyzeContext?.selectedMetadata?.providerId
|
||||
|| ''
|
||||
).trim() || null;
|
||||
const effectiveTmdbId = Number(
|
||||
let effectiveTmdbId = Number(
|
||||
tmdbId
|
||||
|| mkInfo?.analyzeContext?.selectedMetadata?.tmdbId
|
||||
|| 0
|
||||
) || null;
|
||||
const effectiveMetadataKind = String(
|
||||
let effectiveMetadataKind = String(
|
||||
metadataKind
|
||||
|| mkInfo?.analyzeContext?.selectedMetadata?.metadataKind
|
||||
|| ''
|
||||
).trim().toLowerCase() || null;
|
||||
const effectiveDiscNumber = normalizePositiveInteger(discNumber);
|
||||
const effectiveSeasonNumber = Number(
|
||||
let effectiveDiscNumber = normalizePositiveInteger(discNumber);
|
||||
let effectiveSeasonNumber = Number(
|
||||
seasonNumber
|
||||
|| mkInfo?.analyzeContext?.selectedMetadata?.seasonNumber
|
||||
|| 0
|
||||
@@ -14052,7 +14104,17 @@ class PipelineService extends EventEmitter {
|
||||
: []);
|
||||
let tmdbDetails = null;
|
||||
|
||||
const isDvdTmdbMetadataSelection = mediaProfile === 'dvd' && effectiveMetadataProvider === 'tmdb';
|
||||
const isDvdTmdbMetadataSelection = mediaProfile === 'dvd' && effectiveWorkflowKind === 'series';
|
||||
if (mediaProfile === 'dvd' && effectiveWorkflowKind === 'film') {
|
||||
effectiveProviderId = null;
|
||||
effectiveTmdbId = null;
|
||||
effectiveMetadataKind = 'movie';
|
||||
effectiveDiscNumber = null;
|
||||
effectiveSeasonNumber = null;
|
||||
effectiveSeasonName = null;
|
||||
effectiveEpisodeCount = 0;
|
||||
effectiveEpisodes = [];
|
||||
}
|
||||
if (isDvdTmdbMetadataSelection && !effectiveDiscNumber) {
|
||||
const error = new Error('Serien-DVD erkannt: Disk-Nummer ist Pflicht (Start bei 1).');
|
||||
error.statusCode = 400;
|
||||
@@ -14159,6 +14221,7 @@ class PipelineService extends EventEmitter {
|
||||
imdbId: effectiveImdbId,
|
||||
poster: posterValue,
|
||||
metadataProvider: effectiveMetadataProvider,
|
||||
...(effectiveWorkflowKind ? { workflowKind: effectiveWorkflowKind } : {}),
|
||||
providerId: effectiveProviderId,
|
||||
tmdbId: effectiveTmdbId,
|
||||
metadataKind: effectiveMetadataKind,
|
||||
@@ -14170,7 +14233,10 @@ class PipelineService extends EventEmitter {
|
||||
...(tmdbDetails && typeof tmdbDetails === 'object' ? { tmdbDetails } : {})
|
||||
};
|
||||
|
||||
let parentContainerJobId = normalizePositiveInteger(job.parent_job_id || null);
|
||||
const shouldDetachSeriesContainer = mediaProfile === 'dvd' && effectiveWorkflowKind === 'film';
|
||||
let parentContainerJobId = shouldDetachSeriesContainer
|
||||
? null
|
||||
: normalizePositiveInteger(job.parent_job_id || null);
|
||||
const isDvdSeriesSelection = isDvdTmdbMetadataSelection;
|
||||
if (isDvdSeriesSelection) {
|
||||
const normalizeEpisodeRows = (rows) => {
|
||||
@@ -14464,10 +14530,18 @@ class PipelineService extends EventEmitter {
|
||||
selectedPlaylist: playlistDecision.selectedPlaylist || null,
|
||||
selectedTitleId: playlistDecision.selectedTitleId ?? null,
|
||||
metadataProvider: effectiveMetadataProvider,
|
||||
...(effectiveWorkflowKind ? { workflowKind: effectiveWorkflowKind } : {}),
|
||||
selectedMetadata
|
||||
}
|
||||
}, mediaProfile);
|
||||
|
||||
const seriesDetachPatch = shouldDetachSeriesContainer
|
||||
? {
|
||||
parent_job_id: null,
|
||||
job_kind: resolveJobKindForMediaProfile(mediaProfile),
|
||||
media_type: mediaProfile
|
||||
}
|
||||
: {};
|
||||
await historyService.updateJob(jobId, {
|
||||
title: effectiveTitle,
|
||||
year: effectiveYear,
|
||||
@@ -14479,7 +14553,8 @@ class PipelineService extends EventEmitter {
|
||||
last_state: nextStatus,
|
||||
raw_path: updatedRawPath,
|
||||
makemkv_info_json: JSON.stringify(updatedMakemkvInfo),
|
||||
...(parentContainerJobId ? { parent_job_id: parentContainerJobId, job_kind: 'dvd_series_child', media_type: mediaProfile } : {})
|
||||
...(parentContainerJobId ? { parent_job_id: parentContainerJobId, job_kind: 'dvd_series_child', media_type: mediaProfile } : {}),
|
||||
...seriesDetachPatch
|
||||
});
|
||||
|
||||
// Bild in Cache laden (async, blockiert nicht)
|
||||
@@ -16698,6 +16773,27 @@ class PipelineService extends EventEmitter {
|
||||
};
|
||||
})
|
||||
.filter((row) => Number.isFinite(Number(row?.handBrakeTitleId)) && Number(row.handBrakeTitleId) > 0);
|
||||
const allTitlesData = manualTitleSourceRows
|
||||
.map((item) => {
|
||||
const titleId = normalizeReviewTitleId(item?.handBrakeTitleId ?? item?.index ?? item?.id);
|
||||
if (!titleId) {
|
||||
return null;
|
||||
}
|
||||
const durationSeconds = Number(item?.durationSeconds || 0);
|
||||
return {
|
||||
handBrakeTitleId: titleId,
|
||||
durationSeconds,
|
||||
durationMinutes: Number((durationSeconds / 60).toFixed(1)),
|
||||
audioTrackCount: Number(item?.audioTrackCount || 0),
|
||||
subtitleTrackCount: Number(item?.subtitleTrackCount || 0),
|
||||
sizeBytes: Number(item?.sizeBytes || 0)
|
||||
};
|
||||
})
|
||||
.filter((row) => Number.isFinite(Number(row?.handBrakeTitleId)) && Number(row.handBrakeTitleId) > 0)
|
||||
.sort((a, b) => a.handBrakeTitleId - b.handBrakeTitleId);
|
||||
const decisionSelectableTitleIds = normalizeReviewTitleIdList([
|
||||
seriesPlayAllDecision.longestCandidateTitleId
|
||||
]);
|
||||
const preselectedTitleIds = normalizeReviewTitleIdList(
|
||||
(Array.isArray(seriesPlayAllDecision.defaultSelectedTitleIds)
|
||||
? seriesPlayAllDecision.defaultSelectedTitleIds
|
||||
@@ -16711,6 +16807,7 @@ class PipelineService extends EventEmitter {
|
||||
...enrichedReview,
|
||||
handBrakeTitleDecisionRequired: true,
|
||||
handBrakeTitleCandidates: candidatesData,
|
||||
handBrakeAllTitles: allTitlesData,
|
||||
handBrakeDvdInputPath: dvdScanInputPath,
|
||||
handBrakeDecisionMode: 'series_playall_or_double',
|
||||
handBrakeDecisionSummary: {
|
||||
@@ -16722,6 +16819,7 @@ class PipelineService extends EventEmitter {
|
||||
toleranceSeconds: seriesPlayAllDecision.toleranceSeconds,
|
||||
longestVsEpisodeRatio: seriesPlayAllDecision.longestVsEpisodeRatio
|
||||
},
|
||||
handBrakeDecisionSelectableTitleIds: decisionSelectableTitleIds,
|
||||
selectedHandBrakeTitleIds: effectivePreselectedTitleIds,
|
||||
selectedHandBrakeTitleId: effectivePreselectedTitleIds[0] || null,
|
||||
encodeInputPath: null
|
||||
@@ -16758,9 +16856,11 @@ class PipelineService extends EventEmitter {
|
||||
rawPath,
|
||||
handBrakeTitleDecisionRequired: true,
|
||||
handBrakeTitleCandidates: candidatesData,
|
||||
handBrakeAllTitles: allTitlesData,
|
||||
handBrakeDvdInputPath: dvdScanInputPath,
|
||||
handBrakeDecisionMode: 'series_playall_or_double',
|
||||
handBrakeDecisionSummary: enrichedReview.handBrakeDecisionSummary,
|
||||
handBrakeDecisionSelectableTitleIds: decisionSelectableTitleIds,
|
||||
selectedHandBrakeTitleIds: effectivePreselectedTitleIds,
|
||||
selectedHandBrakeTitleId: effectivePreselectedTitleIds[0] || null,
|
||||
reviewConfirmed: false,
|
||||
@@ -17023,6 +17123,27 @@ class PipelineService extends EventEmitter {
|
||||
};
|
||||
})
|
||||
.filter((row) => Number.isFinite(Number(row?.handBrakeTitleId)) && Number(row.handBrakeTitleId) > 0);
|
||||
const allTitlesData = allTitles
|
||||
.map((item) => {
|
||||
const titleId = normalizeReviewTitleId(item?.handBrakeTitleId ?? item?.index ?? item?.id);
|
||||
if (!titleId) {
|
||||
return null;
|
||||
}
|
||||
const durationSeconds = Number(item?.durationSeconds || 0);
|
||||
return {
|
||||
handBrakeTitleId: titleId,
|
||||
durationSeconds,
|
||||
durationMinutes: Number((durationSeconds / 60).toFixed(1)),
|
||||
audioTrackCount: Number(item?.audioTrackCount || 0),
|
||||
subtitleTrackCount: Number(item?.subtitleTrackCount || 0),
|
||||
sizeBytes: Number(item?.sizeBytes || 0)
|
||||
};
|
||||
})
|
||||
.filter((row) => Number.isFinite(Number(row?.handBrakeTitleId)) && Number(row.handBrakeTitleId) > 0)
|
||||
.sort((a, b) => a.handBrakeTitleId - b.handBrakeTitleId);
|
||||
const decisionSelectableTitleIds = normalizeReviewTitleIdList([
|
||||
seriesPlayAllDecision.longestCandidateTitleId
|
||||
]);
|
||||
const preselectedTitleIds = normalizeReviewTitleIdList(
|
||||
(Array.isArray(seriesPlayAllDecision.defaultSelectedTitleIds)
|
||||
? seriesPlayAllDecision.defaultSelectedTitleIds
|
||||
@@ -17036,6 +17157,7 @@ class PipelineService extends EventEmitter {
|
||||
...enrichedReview,
|
||||
handBrakeTitleDecisionRequired: true,
|
||||
handBrakeTitleCandidates: candidatesData,
|
||||
handBrakeAllTitles: allTitlesData,
|
||||
handBrakeDvdInputPath: dvdScanInputPath,
|
||||
handBrakeDecisionMode: 'series_playall_or_double',
|
||||
handBrakeDecisionSummary: {
|
||||
@@ -17047,6 +17169,7 @@ class PipelineService extends EventEmitter {
|
||||
toleranceSeconds: seriesPlayAllDecision.toleranceSeconds,
|
||||
longestVsEpisodeRatio: seriesPlayAllDecision.longestVsEpisodeRatio
|
||||
},
|
||||
handBrakeDecisionSelectableTitleIds: decisionSelectableTitleIds,
|
||||
selectedHandBrakeTitleIds: effectivePreselectedTitleIds,
|
||||
selectedHandBrakeTitleId: effectivePreselectedTitleIds[0] || null,
|
||||
encodeInputPath: null
|
||||
@@ -17083,9 +17206,11 @@ class PipelineService extends EventEmitter {
|
||||
rawPath,
|
||||
handBrakeTitleDecisionRequired: true,
|
||||
handBrakeTitleCandidates: candidatesData,
|
||||
handBrakeAllTitles: allTitlesData,
|
||||
handBrakeDvdInputPath: dvdScanInputPath,
|
||||
handBrakeDecisionMode: 'series_playall_or_double',
|
||||
handBrakeDecisionSummary: enrichedReview.handBrakeDecisionSummary,
|
||||
handBrakeDecisionSelectableTitleIds: decisionSelectableTitleIds,
|
||||
selectedHandBrakeTitleIds: effectivePreselectedTitleIds,
|
||||
selectedHandBrakeTitleId: effectivePreselectedTitleIds[0] || null,
|
||||
reviewConfirmed: false,
|
||||
|
||||
Reference in New Issue
Block a user