diora-web/docs/sources.md
mrwnslz 143950df94
All checks were successful
Build and push Docker image / build (push) Successful in 15s
Test / test (push) Successful in 8m58s
Test / e2e (push) Successful in 1m58s
Abos & Quellen: alle Abos an einem Ort (Navigation Phase 2)
Ein neuer Abschnitt (docs/sources.md, static/js/sources.js) für Podcasts,
YouTube-Kanäle, Hörbücher, Nachrichten und Blogs:
- ein Feld zum Hinzufügen: Adresse (Feed, Seite, YouTube) oder Name eines
  Podcasts; die Art ist wählbar (Podcast, Hörbuch, Nachrichten, Blog);
  /feeds/discover/ erkennt dafür Podcasts (Folgen mit Ton oder Video);
- eine Liste aller Abos mit Filtern (auch „Probleme“) und Suche;
- je Abo: Inhalt öffnen, Einstellungen (die vorhandenen Editoren), Art ändern,
  abbestellen; OPML-Import und -Export.
In der Seitenleiste unten, auf dem Telefon im App-Menü; ⚙ in den Feeds führt
hierher. Abschnitte, die beim Laden schon gezeigt werden, füllen sich jetzt
auch (nav.js zeigt sie nach dem Laden aller Skripte noch einmal).
Podcast-UI aus diora-android 50c6f9c.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:23:12 +02:00

2.6 KiB

Abos & Quellen (navigation phase 2)

One place to manage every subscription: podcasts, YouTube channels, audiobooks, news sources and blogs. The everyday views (Neu, Warteschlange, Nachrichten, Blogs, Hörbücher) show content; adding, changing and removing sources happens here (their own small entry points lead here).

Where

DioraNav section sources ("Abos & Quellen", icon ⚙), panel #tab-sources, group: 'more', footer: true:

  • not in groups() (no tab of its own on a phone);
  • in sections() with footer: true: the sidebar puts it at the bottom, above "Menü"; the phone's app menu has an entry; diora Reader's bar leaves it out;
  • the web page's bar: at the end (wide), as ⚙ (narrow).

The page (static/js/sources.js, diora-web, every platform)

  • Hinzufügen: one field for an address or search words.
    • a YouTube address → its channel (/podcasts/search/?q=), as Podcast or Hörbuch;
    • another address → /feeds/discover/: every feed found, with the kind it looks like (suggested_kind: podcast when most entries carry sound or video, else news/blog) and whether it's subscribed already (subscribed as a feed, podcast_subscribed); the kind can be changed: Podcast · Hörbuch · Nachrichten · Blog;
    • words → the podcast directory (/podcasts/search/). Podcast/Hörbuch subscribe with POST /podcasts/feeds/add/ (then settings {kind: 'audiobook'}), Nachrichten/Blog with POST /feeds/sources/add/.
  • The list: all sources, filter chips Alle · Podcasts · YouTube · Hörbücher · Nachrichten · Blogs · Probleme (fetching fails), and a search over the names.
  • A source's actions (tapping it): open its content, its settings (the existing editors), change its kind (Podcast ↔ Hörbuch, Nachrichten ↔ Blog), unsubscribe.
  • Import & Export: OPML for podcasts and feeds.

Hooks it uses (each optional: without it, it goes to the section instead)

Hook From Does
__dioraPodcastFeedSettings(feedId) native-podcast.js opens the podcast's settings sheet
__dioraPodcastOpenFeed(feedId) native-podcast.js shows the podcast's episode list (Podcasts section)
__dioraFeedsEdit(sourceId) feeds.js opens the source's editor (Nachrichten/Blogs, manage view)
__dioraFeedsStale() feeds.js its state is old: load again when shown
__dioraAudiobookOpen(feedId) audiobooks.js opens the book

The host calls it uses: podcastState, podcastFeedSettings, podcastRefresh (after subscribing), podcastFeedRemoved (after unsubscribing).