diff --git a/src/components/DoomScrollView.tsx b/src/components/DoomScrollView.tsx index f6d6734..04972d9 100644 --- a/src/components/DoomScrollView.tsx +++ b/src/components/DoomScrollView.tsx @@ -46,6 +46,8 @@ export default function DoomScrollView({ items, videoContext = 'mixed', onClose, const [translatedText, setTranslatedText] = useState(null) const [showTextOverlay, setShowTextOverlay] = useState(false) const [showOriginal, setShowOriginal] = useState(false) + const [extracting, setExtracting] = useState(false) + const [extractError, setExtractError] = useState(null) const videoRef = useRef(null) const cooldownRef = useRef(false) @@ -130,6 +132,8 @@ export default function DoomScrollView({ items, videoContext = 'mixed', onClose, setTranslatedText(null) setShowTextOverlay(false) setShowOriginal(false) + setExtracting(false) + setExtractError(null) if (!current?.itemKey) return fetch(`/api/ai-tagging/fields?itemKey=${encodeURIComponent(current.itemKey)}`) .then((r) => r.json()) @@ -178,6 +182,32 @@ export default function DoomScrollView({ items, videoContext = 'mixed', onClose, } }, [navigate, onClose, extractedText]) + const handleExtractText = async () => { + if (!current?.itemKey) return + setExtracting(true) + setExtractError(null) + try { + const res = await fetch('/api/ai-tagging/extract-text', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ itemKey: current.itemKey }), + }) + if (!res.ok) { + const data = await res.json().catch(() => ({})) + throw new Error((data as { error?: string }).error ?? 'Extraction failed') + } + const result = await res.json() + setExtractedText(result.extractedText || null) + setTranslatedText(result.translatedText || null) + if (result.extractedText) setShowTextOverlay(true) + } catch (err) { + setExtractError(err instanceof Error ? err.message : 'Extraction failed') + setTimeout(() => setExtractError(null), 4000) + } finally { + setExtracting(false) + } + } + return (
{/* Keyframe for auto-play progress bar */} @@ -317,7 +347,7 @@ export default function DoomScrollView({ items, videoContext = 'mixed', onClose, {current?.name}
- {extractedText && ( + {extractedText ? ( - )} + ) : current?.itemKey && current?.mediaType === 'image' ? ( + + ) : null} {onViewInLibrary && current?.itemKey && (