import { Readability } from "@mozilla/readability"; import { useContext, useEffect, useState } from "react"; import { DocumentConfigButton, LoaderSpin, MarkdownWrapper, } from "@renderer/components"; import Turndown from "turndown"; import { AppSettingsProviderContext, DocumentProviderContext, } from "@/renderer/context"; import { Button } from "../ui"; import { LinkIcon } from "lucide-react"; export const DocumentHtmlRenderer = () => { const { document, onSpeech, onSegmentVisible, content, setContent } = useContext(DocumentProviderContext); const { EnjoyApp } = useContext(AppSettingsProviderContext); const [title, setTitle] = useState(""); const fetchContent = async () => { const res = await fetch(document.src); const text = await res.text(); const doc = new DOMParser().parseFromString(text, "text/html"); setTitle(doc.title || document.title); const readability = new Readability(doc); const article = readability.parse(); const markdownContent = new Turndown().turndown(article.content); setContent(markdownContent); }; useEffect(() => { fetchContent(); }, [document.src]); useEffect(() => { if (!title) return; if (document.title !== title) { EnjoyApp.documents.update(document.id, { title, }); } }, [title]); if (!content) return ; return (
{title}
{document.metadata?.source && ( )}
{content}
); };