crabidy/plan
Test User 956a490606 rss: don't list image enclosures as episodes
Reported from a real subscription: an episode failed to play with "the
format of the data has not been recognized" on a cdn.netzpolitik.org/….jpg
URL, 272428 bytes — exactly the length the feed declared for a JPEG.

audio_url preferred an audio-typed enclosure but then fell back to *any*
media url, and a WordPress blog feed attaches each post's featured image as
an <enclosure>, structurally identical to a podcast enclosure apart from
type="image/jpeg". https://netzpolitik.org/feed/ is 25 items, 25 JPEG
enclosures, and no audio reference of any kind, so every post became an
episode that could not play.

An enclosure is now accepted when its type says audio, when the feed omits
the type (plenty of hand-rolled feeds do), or when a generic
application/octet-stream is backed by an audio file extension — and
rejected otherwise, so images and video are skipped. Audio-typed still
wins, so a show that publishes both plays as audio.

A feed with entries and no audio now says so ("this looks like a blog feed
rather than a podcast feed"): an empty listing explains nothing on its own.
No URL in the message — a feed URL is a credential.

Also raises DEFAULT_MAX_FEED_BYTES from 8 to 32 MiB. Logbuch:Netzpolitik,
559 episodes in, is a healthy 6.8 MiB: feeds carry their whole back
catalogue with full show notes, so the first cap would have started
refusing real feeds within a year or two. Still bounded, still enforced
while reading rather than after, still lowerable via max_feed_bytes.

Verified: 30 rssdy tests (5 new, over feed-rs's real entry shapes:
image-only, mixed image+audio, untyped, generic-with-extension,
generic-without, video), and both live feeds — netzpolitik.org/feed/ now
yields 0 episodes with the warning, logbuch-netzpolitik.de/feed/mp3
(-> feeds.metaebene.me/lnp/mp3) yields 559 audio/mpeg episodes whose
HH:MM:SS durations parse.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 14:16:25 +02:00
..
audiobookshelf-provider.md Add the audiobookshelf provider (`/abs`) 2026-07-23 23:22:52 +02:00
bookmarks.md Capture library subtrees as bookmarks 2026-07-21 11:11:27 +02:00
build-features.md docs, flake: document tailored builds and name the flake features 2026-07-25 03:18:50 +02:00
captures.md Capture library subtrees with downloaded audio 2026-07-21 13:45:04 +02:00
cbd-bundle.md Bundle server and TUI into a single cbd binary 2026-07-21 14:15:47 +02:00
cli.md Implement the comprehensive CLI (stage 5) 2026-07-22 12:13:51 +02:00
crabidy-store.md Reconcile crabidy-store quality gates and plan with what shipped 2026-07-22 11:36:52 +02:00
fs-provider.md Add a filesystem provider for serialized track nodes 2026-07-21 01:58:55 +02:00
fyyd-provider.md fyyd: mark live API validation done 2026-07-23 17:35:18 +02:00
help-modal.md Add a help modal to cbd-tui behind a declarative binding table 2026-07-20 17:27:12 +02:00
incremental-captures.md Make download captures incremental with skipped tracks and progress 2026-07-21 15:45:04 +02:00
jamendo.md Add the Jamendo provider (/jamendo) for Creative-Commons music 2026-07-24 13:43:05 +02:00
node-editing.md Add rename and delete for modifiable library nodes 2026-07-20 23:34:47 +02:00
orphans.md Add the /orphans provider: a store garbage-collection view 2026-07-22 22:47:23 +02:00
progressive-queueing.md Queue large collections progressively 2026-07-21 01:08:34 +02:00
queue-persistence.md Persist queues as fs-provider folders 2026-07-21 10:41:49 +02:00
queue-register.md cbd-web: queue marks, visual mode, and the register 2026-07-26 10:35:21 +02:00
roles-auth.md Auth: anonymous callers inherit the highest unguarded role 2026-07-23 16:06:01 +02:00
rss-provider.md rss: subscribe to podcast feeds at /rss, including premium ones 2026-07-26 12:36:30 +02:00
search.md Add Tidal search as creatable library nodes 2026-07-20 17:58:44 +02:00
seek.md seek: move 15 seconds inside the playing track with Ctrl-b / Ctrl-f 2026-07-26 14:16:08 +02:00
soundcloud.md Add the SoundCloud provider (`/soundcloud`) with HLS playback 2026-07-24 02:27:10 +02:00
summary.md rss: don't list image enclosures as episodes 2026-07-26 14:16:25 +02:00
visual-mode.md cbd-tui: add library visual (paint-select) mode on v/V; move spectrum to f 2026-07-24 16:20:55 +02:00
web-client.md Add a Leptos web client served by the server 2026-07-21 22:43:06 +02:00
youtube-provider.md Add a YouTube provider backed by yt-dlp 2026-07-21 14:01:58 +02:00
youtube-rustypipe.md Fetch streams in bounded windows and restore yt-dlp for stream URLs 2026-07-21 18:18:40 +02:00