diff options
| author | Claude <noreply@anthropic.com> | 2026-09-21 09:03:48 +0000 |
|---|---|---|
| committer | Claude <noreply@anthropic.com> | 2026-09-21 09:03:48 +0000 |
| commit | eb1c69d47aaee463960909f99973da4cf791d801 (patch) | |
| tree | 1f8bd7fc3ef92c464011ecd090477db670fb3363 /.githooks/pre-commit | |
| parent | f3b36bacb95d8c57aa036959ad81f3c79127dd22 (diff) | |
Subscription resolution, OPML, queue ordering, retention
Discovery was cut, so the share sheet and OPML are the only ways to subscribe.
That raises the bar on the resolver: anything that fails to resolve is a show
the user cannot add at all. It handles a direct feed, a show page via its
link rel=alternate, an Apple Podcasts link via its numeric id, and a YouTube
channel or playlist via the RSS endpoint YouTube already publishes -- which
means a channel becomes an ordinary subscription and only the download step is
special. Handle (@name) URLs carry no channel id and return null rather than
being guessed at.
OPML is ported from FeeDreader but onto XmlPullParserFactory, so unlike the
original it is actually testable off-device. Folder nesting is read and
recorded even though Listen has no folders: silently discarding structure the
user organised is worse than ignoring it.
Queue ordering is pure list operations. Re-adding a queued episode moves it
rather than duplicating it, play-next on the episode already playing is a
no-op instead of interrupting it, and an out-of-range drag index is ignored
rather than thrown.
Retention keeps an episode when its position is non-zero even though it is
marked played -- that combination means it was resumed, and the audio is in
use. Disabled is a flag, not an enormous grace period, because
playedAt + Long.MAX_VALUE overflows negative and would delete everything.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018AwnALZL6bD4VBtATDVv3B
Diffstat (limited to '.githooks/pre-commit')
0 files changed, 0 insertions, 0 deletions
