From 2cec5bc362af008c9f886dfd71b89b138c260c6c Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 10 Jun 2026 22:03:25 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20'=C3=9Cbersetzungen=20nachholen'=20+=20?= =?UTF-8?q?'Audios=20nachholen'=20immer=20verf=C3=BCgbar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beide Nachhol-Aktionen jetzt dauerhaft im Karten-Header (nicht nur bei unvollständigen Pairs) — Reihenfolge Übersetzen → Audio, da Audio alle Sprachen braucht. Co-Authored-By: Claude Fable 5 --- src/pages/Publish.jsx | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/pages/Publish.jsx b/src/pages/Publish.jsx index af4eecf..7efcee9 100644 --- a/src/pages/Publish.jsx +++ b/src/pages/Publish.jsx @@ -167,6 +167,7 @@ function ReadyCard({ bundle, onPublished, onRefresh }) { const [done, setDone] = useState(null); const [assigning, setAssigning] = useState(null); const [audioFilling, setAudioFilling] = useState(false); + const [translateFilling, setTranslateFilling] = useState(false); if (!bundle) { return ( @@ -209,6 +210,16 @@ function ReadyCard({ bundle, onPublished, onRefresh }) { finally { setAssigning(null); } } + async function fillTranslations() { + setTranslateFilling(true); setError(null); + try { + const res = await apiPost(`/pipeline/picture/${bundle.picture.id}/translate-fill`, {}); + if (res.failed) setError(`${res.translated} Pairs übersetzt, ${res.failed} fehlgeschlagen: ${res.errors?.[0]?.error || ''}`); + await onRefresh?.(); + } catch (e) { setError(e.payload?.error || e.message); } + finally { setTranslateFilling(false); } + } + async function fillAudio() { setAudioFilling(true); setError(null); try { @@ -261,16 +272,21 @@ function ReadyCard({ bundle, onPublished, onRefresh }) { {bundle.objects.length} Objekt{bundle.objects.length !== 1 ? 'e' : ''} · {allPairs.length} Pairs · {wordCount} Wörter {incompletePairs.length > 0 && ( -
- - ⚠ {incompletePairs.length} Pair{incompletePairs.length !== 1 ? 's' : ''} unvollständig (Text/Audio) - - +
+ ⚠ {incompletePairs.length} Pair{incompletePairs.length !== 1 ? 's' : ''} unvollständig (Text/Audio) — erst Übersetzungen, dann Audios nachholen
)} + {/* Nachhol-Aktionen immer verfügbar: Reihenfolge Übersetzen → Audio (Audio braucht alle Sprachen) */} +
+ + +
bereit