0.13.1-6 Series Fix

This commit is contained in:
2026-04-14 07:08:59 +00:00
parent cac6442b5b
commit d462de8263
15 changed files with 408 additions and 66 deletions
+82 -3
View File
@@ -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