0.10.2-21 Job Infos
This commit is contained in:
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "ripster-frontend",
|
||||
"version": "0.10.2-20",
|
||||
"version": "0.10.2-21",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ripster-frontend",
|
||||
"version": "0.10.2-20",
|
||||
"version": "0.10.2-21",
|
||||
"dependencies": {
|
||||
"primeicons": "^7.0.0",
|
||||
"primereact": "^10.9.2",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ripster-frontend",
|
||||
"version": "0.10.2-20",
|
||||
"version": "0.10.2-21",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -2588,6 +2588,15 @@ body {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
.job-meta-subtle {
|
||||
font-size: 0.82rem;
|
||||
color: var(--text-color-secondary);
|
||||
}
|
||||
|
||||
.job-meta-encode-config {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.job-configured-selection-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
|
||||
Reference in New Issue
Block a user