0.10.2-21 Job Infos

This commit is contained in:
2026-03-17 14:03:44 +00:00
parent b8cccd0045
commit cdb87b5759
8 changed files with 100 additions and 112 deletions
+82 -103
View File
@@ -743,7 +743,7 @@ export default function JobDetailDialog({
<h4>Job-Infos</h4>
<div className="job-meta-grid job-meta-grid-compact">
<div>
<strong>Aktueller Status:</strong>{' '}
<strong>Status:</strong>{' '}
<span
className={`job-status-icon tone-${statusMeta.tone}`}
title={statusMeta.label}
@@ -751,6 +751,7 @@ export default function JobDetailDialog({
>
<i className={`pi ${statusMeta.icon}`} aria-hidden="true" />
</span>
{' '}<span className="job-meta-subtle">{statusMeta.label}</span>
</div>
<div>
<strong>Start:</strong> {job.start_time || '-'}
@@ -758,8 +759,22 @@ export default function JobDetailDialog({
<div>
<strong>Ende:</strong> {job.end_time || '-'}
</div>
{isCd ? (
<div>
<strong>Rip:</strong> <BoolState value={job?.ripSuccessful} />
</div>
) : (
<>
<div>
<strong>{isAudiobook ? 'Import:' : 'Backup:'}</strong> <BoolState value={job?.backupSuccess} />
</div>
<div>
<strong>Encode:</strong> <BoolState value={job?.encodeSuccess} />
</div>
</>
)}
<PathField
label={isCd ? 'WAV Pfad:' : 'RAW Pfad:'}
label={isCd ? 'WAV:' : 'RAW:'}
value={job.raw_path}
onDownload={canDownloadRaw ? () => onDownloadArchive?.(job, 'raw') : null}
downloadDisabled={!canDownloadRaw}
@@ -772,80 +787,44 @@ export default function JobDetailDialog({
downloadDisabled={!canDownloadOutput}
downloadLoading={downloadBusyTarget === 'output'}
/>
{!isCd ? (
<div>
<strong>Encode Input:</strong> {job.encode_input_path || '-'}
{job.error_message ? (
<div className="job-meta-col-span-2">
<strong>Fehler:</strong> {job.error_message}
</div>
) : null}
<div>
<strong>RAW vorhanden:</strong> <BoolState value={job.rawStatus?.exists} />
</div>
<div>
<strong>{isCd ? 'Audio-Dateien vorhanden:' : (isAudiobook ? (job.outputStatus?.isDirectory ? 'Audiobook-Dateien vorhanden:' : 'Audiobook-Datei vorhanden:') : 'Movie Datei vorhanden:')}</strong> <BoolState value={job.outputStatus?.exists} />
</div>
{isCd ? (
<div>
<strong>Rip erfolgreich:</strong> <BoolState value={job?.ripSuccessful} />
</div>
) : (
<>
<div>
<strong>{isAudiobook ? 'Import erfolgreich:' : 'Backup erfolgreich:'}</strong> <BoolState value={job?.backupSuccess} />
</div>
<div>
<strong>Encode erfolgreich:</strong> <BoolState value={job?.encodeSuccess} />
</div>
</>
)}
<div className="job-meta-col-span-2">
<strong>Letzter Fehler:</strong> {job.error_message || '-'}
</div>
</div>
</section>
{!isCd && !isAudiobook && (hasConfiguredSelection || encodePlanUserPreset) ? (
{!isCd && (hasConfiguredSelection || encodePlanUserPreset || executedHandBrakeCommand || job.handbrakeInfo?.preEncodeScripts?.configured > 0 || job.handbrakeInfo?.postEncodeScripts?.configured > 0) ? (
<section className="job-meta-block job-meta-block-full">
<h4>Hinterlegte Encode-Auswahl</h4>
<div className="job-configured-selection-grid">
<div>
<strong>Pre-Encode Skripte:</strong> {configuredSelection.preScripts.length > 0 ? configuredSelection.preScripts.join(' | ') : '-'}
<h4>Encode-Konfiguration</h4>
{(hasConfiguredSelection || encodePlanUserPreset) && !isAudiobook ? (
<div className="job-meta-grid job-meta-grid-compact job-meta-encode-config">
<div>
<strong>Pre-Skripte:</strong> {configuredSelection.preScripts.length > 0 ? configuredSelection.preScripts.join(', ') : (configuredSelection.preChains.length > 0 ? configuredSelection.preChains.join(', ') : '-')}
</div>
<div>
<strong>Post-Skripte:</strong> {configuredSelection.postScripts.length > 0 ? configuredSelection.postScripts.join(', ') : (configuredSelection.postChains.length > 0 ? configuredSelection.postChains.join(', ') : '-')}
</div>
{encodePlanUserPreset ? (
<div className="job-meta-col-span-2">
<strong>Preset:</strong> {encodePlanUserPreset.name || '-'}{encodePlanUserPreset.handbrakePreset ? ` · ${encodePlanUserPreset.handbrakePreset}` : ''}{encodePlanUserPreset.extraArgs ? ` · ${encodePlanUserPreset.extraArgs}` : ''}
</div>
) : null}
</div>
<div>
<strong>Pre-Encode Ketten:</strong> {configuredSelection.preChains.length > 0 ? configuredSelection.preChains.join(' | ') : '-'}
) : null}
{executedHandBrakeCommand ? (
<div className="handbrake-command-preview">
<small><strong>{isAudiobook ? 'FFmpeg' : 'HandBrakeCLI'}:</strong></small>
<pre>{executedHandBrakeCommand}</pre>
</div>
<div>
<strong>Post-Encode Skripte:</strong> {configuredSelection.postScripts.length > 0 ? configuredSelection.postScripts.join(' | ') : '-'}
) : null}
{!isAudiobook && (job.handbrakeInfo?.preEncodeScripts?.configured > 0 || job.handbrakeInfo?.postEncodeScripts?.configured > 0) ? (
<div className="script-results-grid">
<ScriptSummarySection title="Pre-Encode" summary={job.handbrakeInfo?.preEncodeScripts} />
<ScriptSummarySection title="Post-Encode" summary={job.handbrakeInfo?.postEncodeScripts} />
</div>
<div>
<strong>Post-Encode Ketten:</strong> {configuredSelection.postChains.length > 0 ? configuredSelection.postChains.join(' | ') : '-'}
</div>
<div className="job-meta-col-span-2">
<strong>User-Preset:</strong>{' '}
{encodePlanUserPreset
? `${encodePlanUserPreset.name || '-'} | Preset=${encodePlanUserPreset.handbrakePreset || '-'} | ExtraArgs=${encodePlanUserPreset.extraArgs || '-'}`
: '-'}
</div>
</div>
</section>
) : null}
{!isCd && executedHandBrakeCommand ? (
<section className="job-meta-block job-meta-block-full">
<h4>Ausgeführter Encode-Befehl</h4>
<div className="handbrake-command-preview">
<small><strong>{isAudiobook ? 'FFmpeg' : 'HandBrakeCLI'} (tatsächlich gestartet):</strong></small>
<pre>{executedHandBrakeCommand}</pre>
</div>
</section>
) : null}
{!isCd && !isAudiobook && (job.handbrakeInfo?.preEncodeScripts?.configured > 0 || job.handbrakeInfo?.postEncodeScripts?.configured > 0) ? (
<section className="job-meta-block job-meta-block-full">
<h4>Skripte</h4>
<div className="script-results-grid">
<ScriptSummarySection title="Pre-Encode" summary={job.handbrakeInfo?.preEncodeScripts} />
<ScriptSummarySection title="Post-Encode" summary={job.handbrakeInfo?.postEncodeScripts} />
</div>
) : null}
</section>
) : null}
@@ -877,6 +856,42 @@ export default function JobDetailDialog({
</>
) : null}
<h4>Log</h4>
{showFinalLog ? (
<>
<div className="actions-row">
<Button
label={logLoaded ? 'Tail neu laden (800)' : 'Tail laden (800)'}
icon="pi pi-download"
severity="secondary"
outlined
size="small"
onClick={() => onLoadLog?.(job, 'tail')}
loading={logLoadingMode === 'tail'}
/>
<Button
label="Vollständiges Log laden"
icon="pi pi-list"
severity="secondary"
outlined
size="small"
onClick={() => onLoadLog?.(job, 'all')}
loading={logLoadingMode === 'all'}
disabled={logCount <= 0}
/>
<small>{`Log-Zeilen: ${logCount}`}</small>
{logTruncated ? <small>(gekürzt auf letzte 800 Zeilen)</small> : null}
</div>
{logLoaded ? (
<pre className="log-box">{job.log || ''}</pre>
) : (
<p>Log nicht vorgeladen. Über die Buttons oben laden.</p>
)}
</>
) : (
<p>Live-Log wird nur im Dashboard während laufender Analyse/Rip/Encode angezeigt.</p>
)}
<h4>Aktionen</h4>
{queueLocked ? (
<div className="actions-row">
@@ -1005,42 +1020,6 @@ export default function JobDetailDialog({
</div>
)}
<h4>Log</h4>
{showFinalLog ? (
<>
<div className="actions-row">
<Button
label={logLoaded ? 'Tail neu laden (800)' : 'Tail laden (800)'}
icon="pi pi-download"
severity="secondary"
outlined
size="small"
onClick={() => onLoadLog?.(job, 'tail')}
loading={logLoadingMode === 'tail'}
/>
<Button
label="Vollständiges Log laden"
icon="pi pi-list"
severity="secondary"
outlined
size="small"
onClick={() => onLoadLog?.(job, 'all')}
loading={logLoadingMode === 'all'}
disabled={logCount <= 0}
/>
<small>{`Log-Zeilen: ${logCount}`}</small>
{logTruncated ? <small>(gekürzt auf letzte 800 Zeilen)</small> : null}
</div>
{logLoaded ? (
<pre className="log-box">{job.log || ''}</pre>
) : (
<p>Log nicht vorgeladen. Über die Buttons oben laden.</p>
)}
</>
) : (
<p>Live-Log wird nur im Dashboard während laufender Analyse/Rip/Encode angezeigt.</p>
)}
{!queueLocked ? (
<div className="action-delete-entry">
<span className="action-desc">Entfernt diesen Eintrag aus der Verlaufsliste Dateien auf der Festplatte bleiben erhalten.</span>