0.13.1-6 Series Fix
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user