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>
47 lines
2.6 KiB
Markdown
47 lines
2.6 KiB
Markdown
# 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).
|