0.13.1-8 Fix Analysis
This commit is contained in:
@@ -625,6 +625,14 @@ export const api = {
|
||||
afterMutationInvalidate(['/history', '/pipeline/queue']);
|
||||
return result;
|
||||
},
|
||||
async submitRawDecision(jobId, decision) {
|
||||
const result = await request(`/pipeline/jobs/${jobId}/raw-decision`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ decision })
|
||||
});
|
||||
afterMutationInvalidate(['/history', '/pipeline/queue']);
|
||||
return result;
|
||||
},
|
||||
async startJob(jobId) {
|
||||
const result = await request(`/pipeline/start/${jobId}`, {
|
||||
method: 'POST'
|
||||
|
||||
@@ -1126,6 +1126,7 @@ export default function PipelineStatusCard({
|
||||
onConfirmReview,
|
||||
onSelectPlaylist,
|
||||
onSelectHandBrakeTitle,
|
||||
onSubmitRawDecision,
|
||||
onCancel,
|
||||
onRetry,
|
||||
onDeleteJob,
|
||||
@@ -2131,7 +2132,9 @@ export default function PipelineStatusCard({
|
||||
};
|
||||
}, [running, retryJobId]);
|
||||
|
||||
const playlistDecisionRequiredBeforeStart = state === 'WAITING_FOR_USER_DECISION' && !handBrakeTitleDecisionRequired;
|
||||
const manualDecisionState = pipeline?.context?.manualDecisionState || null;
|
||||
const rawDecisionRequiredBeforeStart = state === 'WAITING_FOR_USER_DECISION' && manualDecisionState === 'waiting_for_raw_decision';
|
||||
const playlistDecisionRequiredBeforeStart = state === 'WAITING_FOR_USER_DECISION' && !handBrakeTitleDecisionRequired && !rawDecisionRequiredBeforeStart;
|
||||
const isSeriesDvdReview = useMemo(() => {
|
||||
if (jobMediaProfile !== 'dvd') {
|
||||
return false;
|
||||
@@ -3103,6 +3106,40 @@ export default function PipelineStatusCard({
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
{rawDecisionRequiredBeforeStart && !queueLocked ? (
|
||||
<div className="playlist-decision-block">
|
||||
<h3>RAW Entscheidung erforderlich</h3>
|
||||
<small>
|
||||
Vorhandenes Raw zur Disk gefunden. Wie soll weiter verfahren werden?
|
||||
</small>
|
||||
<div className="actions-row mt-3">
|
||||
<Button
|
||||
label="mit RAW weiter machen"
|
||||
icon="pi pi-check"
|
||||
severity="success"
|
||||
onClick={() => onSubmitRawDecision?.(retryJobId, 'continue')}
|
||||
loading={busy}
|
||||
/>
|
||||
<Button
|
||||
label="RAW löschen und Rip erneut starten"
|
||||
icon="pi pi-trash"
|
||||
severity="danger"
|
||||
outlined
|
||||
onClick={() => onSubmitRawDecision?.(retryJobId, 'delete')}
|
||||
loading={busy}
|
||||
/>
|
||||
<Button
|
||||
label="abbrechen"
|
||||
icon="pi pi-times"
|
||||
severity="secondary"
|
||||
outlined
|
||||
onClick={() => onSubmitRawDecision?.(retryJobId, 'cancel')}
|
||||
loading={busy}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
{playlistDecisionRequiredBeforeStart && !queueLocked ? (
|
||||
<div className="playlist-decision-block">
|
||||
<h3>Playlist-Auswahl erforderlich</h3>
|
||||
|
||||
@@ -1906,6 +1906,21 @@ export default function RipperPage({
|
||||
}
|
||||
};
|
||||
|
||||
const handleSubmitRawDecision = async (jobId, decision) => {
|
||||
const normalizedJobId = normalizeJobId(jobId);
|
||||
if (normalizedJobId) setJobBusy(normalizedJobId, true);
|
||||
try {
|
||||
await api.submitRawDecision(jobId, decision);
|
||||
await refreshPipeline();
|
||||
await loadRipperJobs();
|
||||
setExpandedJobId(normalizedJobId);
|
||||
} catch (error) {
|
||||
showError(error);
|
||||
} finally {
|
||||
if (normalizedJobId) setJobBusy(normalizedJobId, false);
|
||||
}
|
||||
};
|
||||
|
||||
const handleRetry = async (jobId) => {
|
||||
const normalizedJobId = normalizeJobId(jobId);
|
||||
if (normalizedJobId) setJobBusy(normalizedJobId, true);
|
||||
@@ -3097,6 +3112,7 @@ export default function RipperPage({
|
||||
onConfirmReview={handleConfirmReview}
|
||||
onSelectPlaylist={handleSelectPlaylist}
|
||||
onSelectHandBrakeTitle={handleSelectHandBrakeTitle}
|
||||
onSubmitRawDecision={handleSubmitRawDecision}
|
||||
onCancel={handleCancel}
|
||||
onRetry={handleRetry}
|
||||
onDeleteJob={handleDeleteRipperJob}
|
||||
|
||||
Reference in New Issue
Block a user