0.13.1-1 Episode Detection
This commit is contained in:
@@ -345,6 +345,11 @@ function getQueueActionResult(response) {
|
||||
return response?.result && typeof response.result === 'object' ? response.result : {};
|
||||
}
|
||||
|
||||
function isPipelineMetadataFlowStatus(value) {
|
||||
const normalized = String(value || '').trim().toUpperCase();
|
||||
return ['METADATA_SELECTION', 'READY_TO_START', 'WAITING_FOR_USER_DECISION'].includes(normalized);
|
||||
}
|
||||
|
||||
function normalizeSortText(value) {
|
||||
return String(value || '').trim().toLocaleLowerCase('de-DE');
|
||||
}
|
||||
@@ -1113,6 +1118,14 @@ export default function HistoryPage({ refreshToken = 0 }) {
|
||||
const discNumber = selectedMetadata?.discNumber ?? analyzeContext?.seriesLookupHint?.discNumber ?? null;
|
||||
const context = {
|
||||
jobId,
|
||||
status: row?.status || null,
|
||||
lastState: row?.last_state || null,
|
||||
submitMode: (
|
||||
isPipelineMetadataFlowStatus(row?.status)
|
||||
|| isPipelineMetadataFlowStatus(row?.last_state)
|
||||
)
|
||||
? 'pipeline'
|
||||
: 'assign',
|
||||
detectedTitle: row?.detected_title || row?.title || '',
|
||||
selectedMetadata: {
|
||||
...(selectedMetadata && typeof selectedMetadata === 'object' ? selectedMetadata : {}),
|
||||
@@ -1166,8 +1179,53 @@ export default function HistoryPage({ refreshToken = 0 }) {
|
||||
|
||||
const handleOmdbSubmit = async (payload) => {
|
||||
const provider = String(payload?.metadataProvider || metadataDialogContext?.metadataProvider || 'omdb').trim().toLowerCase() || 'omdb';
|
||||
const submitMode = String(metadataDialogContext?.submitMode || 'assign').trim().toLowerCase() || 'assign';
|
||||
const isPipelineFlow = submitMode === 'pipeline';
|
||||
setOmdbAssignBusy(true);
|
||||
try {
|
||||
if (isPipelineFlow) {
|
||||
await api.selectMetadata(payload);
|
||||
setMetadataDialogVisible(false);
|
||||
setMetadataDialogContext(null);
|
||||
|
||||
try {
|
||||
const startResponse = await api.startJob(payload.jobId);
|
||||
const startResult = getQueueActionResult(startResponse);
|
||||
if (startResult.queued) {
|
||||
toastRef.current?.show({
|
||||
severity: 'info',
|
||||
summary: 'Job in Queue',
|
||||
detail: startResult.queuePosition > 0
|
||||
? `Metadaten übernommen. Start wurde in Queue-Position ${startResult.queuePosition} eingeplant.`
|
||||
: 'Metadaten übernommen. Start wurde in der Queue eingeplant.',
|
||||
life: 3500
|
||||
});
|
||||
} else {
|
||||
toastRef.current?.show({
|
||||
severity: 'success',
|
||||
summary: 'Job gestartet',
|
||||
detail: 'Metadaten übernommen. Die Verarbeitung wurde gestartet.',
|
||||
life: 3200
|
||||
});
|
||||
}
|
||||
} catch (startError) {
|
||||
const startMessage = String(startError?.message || '').trim();
|
||||
const waitingForPlaylist = startMessage.includes('waiting_for_manual_playlist_selection');
|
||||
toastRef.current?.show({
|
||||
severity: waitingForPlaylist ? 'warn' : 'error',
|
||||
summary: waitingForPlaylist ? 'Metadaten übernommen' : 'Start fehlgeschlagen',
|
||||
detail: waitingForPlaylist
|
||||
? 'Metadaten wurden übernommen, aber es fehlt noch eine Titel-/Playlist-Auswahl. Bitte im Ripper fortsetzen.'
|
||||
: (startMessage || 'Job konnte nach der Metadaten-Übernahme nicht gestartet werden.'),
|
||||
life: waitingForPlaylist ? 4200 : 4500
|
||||
});
|
||||
}
|
||||
|
||||
await load();
|
||||
await refreshDetailIfOpen(payload.jobId);
|
||||
return;
|
||||
}
|
||||
|
||||
await api.assignJobOmdb(payload.jobId, payload);
|
||||
toastRef.current?.show({
|
||||
severity: 'success',
|
||||
@@ -1180,6 +1238,9 @@ export default function HistoryPage({ refreshToken = 0 }) {
|
||||
await load();
|
||||
await refreshDetailIfOpen(payload.jobId);
|
||||
} catch (error) {
|
||||
if (isPipelineFlow) {
|
||||
throw error;
|
||||
}
|
||||
toastRef.current?.show({
|
||||
severity: 'error',
|
||||
summary: provider === 'tmdb' ? 'TMDb-Zuweisung fehlgeschlagen' : 'OMDb-Zuweisung fehlgeschlagen',
|
||||
|
||||
Reference in New Issue
Block a user