- Neuer Befehl `manage.py import_antennapod <backup.db> --user <name> [--dry-run]
[--global-auto-download on|off] [--backup-date ...]`: übernimmt aus einer
AntennaPod-Datenbanksicherung die Abos (Abgleich über normalisierte URL,
fehlende werden angelegt, lokale übersprungen), die Podcast-Einstellungen
(Tempo, Intro/Outro, Lautstärke, Filter mit Phrasen in Anführungszeichen,
Mindestlänge, neue Folgen, „nicht aktualisieren“ -> ignorieren, automatischer
Download), den Zustand jeder Folge mit Zustand (gehört, neu, Position,
Favorit, Zeitpunkt), die Warteschlange (AntennaPods Reihenfolge zuerst) und
nimmt bekannte, dort nicht neue Folgen aus „Neu“. Neuere Änderungen in diora
bleiben, Favoriten werden vereinigt. Alles in einer Transaktion; ein zweiter
Lauf ändert nichts mehr.
- PodcastFeed.auto_download (Einstellung pro Podcast, in feeds/, state/ und
feeds/<id>/settings/) und PodcastSettings.auto_download_default (in settings/
und state/), mit dem neue Abos (Hinzufügen, OPML, gpodder, Import) starten.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Eingereihte und angefangene Folgen verlassen die Inbox (ausgeblendet,
nicht gehört), statt dort neben der Warteschlange zu stehen.
- Gehört heißt: höchstens 30 s vor dem Ende, wie in den Apps, statt bei
90 % (bei 2 h waren das 12 Minuten vor Schluss). Gilt auch für den
gPodder-Sync.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Folge wurde nur über die Audio-Adresse gesucht, über alle Nutzer
hinweg. Haben zwei Nutzer denselben Podcast, landete die Stelle bei der
Folgen-Zeile des anderen (der eigene Fortschritt, aber an der falschen
Folge) und kam beim eigenen Abo nie an. Jetzt nur unter den eigenen
Abos gesucht; mit Test.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AntennaPod's GpodnetEpisodeActionPostResponse expects update_urls
in the episode upload response, not just timestamp.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AntennaPod throws JSONException when update_urls is missing from the
subscription list response. Return the change-format object instead
of a plain array for GET requests without a since parameter.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
With 400 subscriptions, the initial sync POST was triggering 400
sequential RSS fetches in one request, causing a timeout/sync failure.
Feed metadata is populated by the cron job instead.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AntennaPod throws JSONException when update_urls is absent from the
GET ?since=... subscription response. Added update_urls: [] to both
subscriptions_by_device and subscriptions_all delta responses.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Implement gPodder API v2 compatible endpoints at /api/2/:
- Auth: login/logout via HTTP Basic Auth or session
- Devices: list and register sync devices
- Subscriptions: get/add/remove per device, delta sync with ?since=
- Episode actions: upload play/position events, syncs to EpisodeProgress
- Server URL for AntennaPod: https://diora.creamfresh.xyz/api/2/
- Bump SW cache diora-v4 → v5 to force re-fetch of updated app.js
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>