{% extends "base.html" %} {% block title %}Redax-WP — Feeds{% endblock %} {% block content %}

📡 RSS-Feeds

Aktive Feeds ({{ feeds|length }})

{% for feed in feeds %}
{{ feed.name }}
{{ feed.url }}
{{ feed.schedule }} {% if feed.auto_publish %}Auto-Publish{% endif %} {% if feed.ki_rewrite %}KI-Rewrite{% endif %} {% if feed.teaser_only %}Teaser{% endif %}
{% if feed.last_error %}
⚠️ {{ feed.last_error[:80] }}
{% endif %} {% if feed.last_fetched_at %}
Zuletzt: {{ feed.last_fetched_at[:16] }}
{% endif %}
{% else %}
Noch keine Feeds konfiguriert.
{% endfor %}

Artikel-Queue ({{ queue|length }} neu)

{% for item in queue %}
📡 {{ item.feed_name }}
{{ item.title }}
{{ item.url[:60] }}...
{% else %}
Queue ist leer — alle Artikel verarbeitet.
{% endfor %}
{% endblock %} {% block extra_js %} function showAddFeed() { document.getElementById('add-feed-modal').classList.remove('hidden'); } function hideAddFeed() { document.getElementById('add-feed-modal').classList.add('hidden'); } async function submitAddFeed() { const data = { name: document.getElementById('new-feed-name').value, url: document.getElementById('new-feed-url').value, schedule: document.getElementById('new-feed-schedule').value, active: 1, auto_publish: document.getElementById('new-feed-auto').checked ? 1 : 0, ki_rewrite: document.getElementById('new-feed-ki').checked ? 1 : 0, teaser_only: document.getElementById('new-feed-teaser').checked ? 1 : 0, blacklist: document.getElementById('new-feed-blacklist').value, }; if (!data.name || !data.url) { showToast('⚠️ Name und URL erforderlich'); return; } const r = await fetch('/api/feeds/add', {method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(data)}); const d = await r.json(); if (d.success) { showToast('✅ Feed hinzugefügt'); setTimeout(() => location.reload(), 1000); } else showToast('❌ Fehler'); } async function fetchFeedNow(id, btn) { btn.textContent = '⟳ ...'; const r = await fetch(`/api/feeds/${id}/fetch`, {method:'POST'}); const d = await r.json(); if (d.success) showToast(`✅ ${d.new_items} neue Artikel`); btn.textContent = '🔄 Abrufen'; } async function deleteFeed(id, name) { if (!confirm(`Feed "${name}" wirklich löschen?`)) return; const r = await fetch(`/api/feeds/${id}/delete`, {method:'POST'}); const d = await r.json(); if (d.success) { showToast('🗑️ Feed gelöscht'); setTimeout(() => location.reload(), 1000); } } async function approveItem(id) { const r = await fetch(`/api/queue/${id}/approve`, {method:'POST'}); const d = await r.json(); if (d.success) { showToast('✅ Artikel übernommen'); document.getElementById(`queue-item-${id}`).remove(); } } async function rejectItem(id) { const r = await fetch(`/api/queue/${id}/reject`, {method:'POST'}); const d = await r.json(); if (d.success) document.getElementById(`queue-item-${id}`).remove(); } {% endblock %}