summaryrefslogtreecommitdiff
path: root/CLAUDE.md
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-09-26 10:13:04 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-09-26 10:13:04 +0000
commit4488a3f49cadcdcd37ce29bedf49d0369983bfb1 (patch)
tree71180ffbf868bd9bdbec5f07d1c98ba1d1822c64 /CLAUDE.md
parent315fee32e64c75f641b7673092d1f3f42ea27e57 (diff)
Name a shared video from the extractor when its page will not
Facebook serves no og: tags to a non-browser at all, so a shared video was filed as "Video 10153231379946729". yt-dlp knows perfectly well what it is called, and is going to be run against that URL anyway. The probe only happens when the page gave no title: a title that was shared is the one that was meant, and this costs a network round trip. It is allowed to fail, because it buys a nicer name rather than anything the episode needs -- a video that cannot be probed still downloads and plays. Duration comes along with it, which Facebook episodes previously had to do without entirely. This retires the last entry but one from the reachability allowlist: YouTubeAudio.probe has been sitting there since phase 1 described as "the resolver will want it for episode durations", which turned out to be exactly right. Verified on a device: the same Facebook video that arrived as "Video 10153231379946729" this morning now arrives as "How to Share With Just Friends", 74 seconds. No permission changes, no schema change. 428 unit tests green, detekt and lint clean, coverage 89.93 -> 89.97. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018AwnALZL6bD4VBtATDVv3B
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md8
1 files changed, 4 insertions, 4 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index 3abde17..84a7fd5 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -227,10 +227,10 @@ out of a possibly-partial MP3, and the JSON path covers the shows that mark chap
episodes are fetched and one row cannot be honest about two sources.
- **Facebook tells a non-browser nothing.** It serves no `og:` tags at all -- verified with the
- app's own user agent -- so a shared video gets a fallback title of "Video <id>". yt-dlp knows
- the real title (`probe` in `ytaudio.py` returns it, and `YouTubeAudio.probe` is still sitting
- in the reachability allowlist waiting for a caller). Backfilling from it is the obvious fix
- and is not done yet.
+ app's own user agent -- so the page cannot name a shared video. `SubscriptionRepository` asks
+ the extractor instead when the page gave no title, which is where the title and duration now
+ come from. Only then: a title that was shared is the one that was meant, and the probe costs
+ a network round trip.
- **Anything entering the queue is downloaded immediately, on any network.** The hook is
`QueueRepository`'s `onQueued`, fired with newly-present ids only, because the queue is the