diff options
| author | Claude <noreply@anthropic.com> | 2026-09-21 09:13:38 +0000 |
|---|---|---|
| committer | Claude <noreply@anthropic.com> | 2026-09-21 09:13:38 +0000 |
| commit | 537b729b6837f48483e38d1a5fbe64f487a79a38 (patch) | |
| tree | bd973e6e5f9d3bf2e631604ce3cdb5af0987c46a /config | |
| parent | 881447309129e6c3972a3ae1c5dde239a34c5128 (diff) | |
Episode downloads, with the YouTube path kept separate
Two sources with no fallback between them. A YouTube subscription's media URL
is a watch page, not audio: fetching it over plain HTTP would store an HTML
document under an .mp3 name that fails to play with nothing to explain why.
The subscription kind decides the route.
Audio is written to a .part name and renamed only once complete. A truncated
file recorded as DOWNLOADED plays as a cut-off episode and reads like the
publisher's fault. On failure the partial is removed and localPath cleared,
so a FAILED row never points at a file something downstream might try to play.
A download recorded as complete whose file has since been deleted is fetched
again rather than trusted, because otherwise playback fails on a file the
database insists exists.
File names are derived from the episode id with separators stripped. Ids come
from feeds, and a guid containing a path separator would otherwise write
outside the library directory.
The Chaquopy-backed source sits behind an interface so the downloader's own
logic stays testable off-device; nothing in the real source can run without an
Android Python runtime.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018AwnALZL6bD4VBtATDVv3B
Diffstat (limited to 'config')
0 files changed, 0 insertions, 0 deletions
