diff --git a/frontend/src/tools/paywallkiller.jsx b/frontend/src/tools/paywallkiller.jsx index 463be87..a7bded6 100644 --- a/frontend/src/tools/paywallkiller.jsx +++ b/frontend/src/tools/paywallkiller.jsx @@ -12,12 +12,8 @@ export default function PaywallKiller() { const [inputUrl, setInputUrl] = useState(''); const [status, setStatus] = useState('idle'); const [archiveUrl, setArchiveUrl] = useState(''); - const [snapshotUrl, setSnapshotUrl] = useState(''); const [captchaDone, setCaptchaDone] = useState(false); - const [errMsg, setErrMsg] = useState(''); - const [pdfLoading, setPdfLoading] = useState(false); - const inputRef = useRef(null); - const snapshotRef = useRef(null); + const inputRef = useRef(null); function getTargetUrl() { const url = inputUrl.trim(); @@ -28,60 +24,18 @@ export default function PaywallKiller() { if (!inputUrl.trim()) return; const aUrl = `https://archive.ph/newest/${getTargetUrl()}`; setArchiveUrl(aUrl); - setSnapshotUrl(''); setStatus('open_archive'); setCaptchaDone(false); - setErrMsg(''); - } - - async function handlePdf() { - const urlToUse = snapshotUrl.trim() || archiveUrl; - if (!urlToUse) return; - setPdfLoading(true); - setErrMsg(''); - try { - const token = localStorage.getItem('sk_token'); - const res = await fetch('/api/tools/paywallkiller/pdf', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - ...(token ? { Authorization: `Bearer ${token}` } : {}), - }, - body: JSON.stringify({ archiveUrl: urlToUse }), - }); - if (!res.ok) { - const d = await res.json().catch(() => ({})); - throw new Error(d.error || 'PDF-Fehler'); - } - const blob = await res.blob(); - const objUrl = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = objUrl; - a.download = 'artikel_' + Date.now() + '.pdf'; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); - setTimeout(() => URL.revokeObjectURL(objUrl), 5000); - } catch (err) { - setErrMsg(err.message || 'PDF fehlgeschlagen'); - } finally { - setPdfLoading(false); - } } function handleReset() { setInputUrl(''); setStatus('idle'); setArchiveUrl(''); - setSnapshotUrl(''); setCaptchaDone(false); - setErrMsg(''); - setPdfLoading(false); setTimeout(() => inputRef.current?.focus(), 50); } - const canPdf = captchaDone && (snapshotUrl.trim().startsWith('https://archive.') || archiveUrl); - return (
@@ -122,40 +76,25 @@ export default function PaywallKiller() { {status === 'open_archive' && ( <> {/* Schritt 1 */} -
+
1 ARCHIVE.PH ÖFFNEN & CAPTCHA LÖSEN
-
- Öffne archive.ph, löse das CAPTCHA, warte bis der Artikel vollständig sichtbar ist.{'\n'} - Kopiere dann die URL aus der Adressleiste (sieht aus wie{' '} - archive.ph/AbCdE) und füge sie unten ein. + +
+ Öffne archive.ph und löse das CAPTCHA. Warte bis der vollständige Artikel sichtbar ist, dann zurückkommen und Schritt 2 ausführen.
- + + 🌐 archive.ph öffnen - {/* Snapshot-URL Eingabe */} -
SNAPSHOT-URL AUS ADRESSLEISTE (optional)
- setSnapshotUrl(e.target.value)} - placeholder="https://archive.ph/AbCdE" - style={{ ...S.inp, width: '100%', boxSizing: 'border-box', marginBottom: 12, fontSize: 12 }} - /> - - {/* Checkbox */} -
setCaptchaDone(v => !v)} +
setCaptchaDone(v => !v)} style={{ display: 'flex', alignItems: 'center', gap: 12, cursor: 'pointer', padding: '10px 12px', background: captchaDone ? `${C.success}12` : 'rgba(255,255,255,0.03)', border: `1px solid ${captchaDone ? C.success + '55' : 'rgba(255,255,255,0.1)'}`, borderRadius: 8 }}> -
- {captchaDone && } +
+ {captchaDone && }
Artikel ist vollständig sichtbar @@ -163,52 +102,50 @@ export default function PaywallKiller() {
- {/* Schritt 2 – nur wenn Checkbox gesetzt */} + {/* Schritt 2 – PDF über Browser-Druck */} {captchaDone && (
2 - PDF ERSTELLEN + ALS PDF SPEICHERN
-
- {snapshotUrl.trim() - ? `Nutzt Snapshot-URL: ${snapshotUrl.trim()}` - : 'Nutzt: ' + archiveUrl} + +
+ Öffne den Artikel nochmal und nutze die Drucken-Funktion deines Browsers um ihn als PDF zu speichern:
- + + {/* Anleitung */} + {[ + ['📱', 'Android Chrome', 'Menü (⋮) → Teilen → Drucken → Als PDF speichern'], + ['🍎', 'iOS Safari', 'Teilen → Als PDF sichern'], + ['💻', 'Desktop', 'Strg+P / Cmd+P → Ziel: Als PDF speichern'], + ].map(([icon, label, desc]) => ( +
+ {icon} +
+
{label}
+
{desc}
+
+
+ ))} + + + 🖨 Artikel öffnen → Als PDF drucken +
)} )} - {errMsg && ( -
-
- ⚠️ -
-
{errMsg}
- {errMsg.includes('CAPTCHA') && ( - - 🌐 archive.ph nochmal öffnen - - )} -
-
-
- )} - {status === 'idle' && (
SO FUNKTIONIERT ES
{[ ['1', 'URL des gesperrten Artikels einfügen'], - ['2', 'archive.ph im Browser öffnen, CAPTCHA einmalig lösen'], - ['3', 'Snapshot-URL aus Adressleiste kopieren und einfügen'], - ['4', 'PDF automatisch herunterladen'], + ['2', 'archive.ph öffnen, CAPTCHA einmalig lösen'], + ['3', 'Bestätigen dass der Artikel sichtbar ist'], + ['4', 'Über Drucken-Funktion als PDF speichern'], ].map(([num, text]) => (
{num}