Each of the 56 tense guides and grammar notes gets a curated YouTube video attached (54 with picks, 2 silent nulls on rare / hard-to-find topics). Users can stream in YouTube/Safari, download via YouTubeKit for offline viewing, or play the local MP4 full-screen via AVPlayer. YouTubeVideoStore loads the bundled youtube_videos.json at launch and serves lookups by tense id or grammar note id. VideoDownloadService resolves the best progressive MP4 stream off the main actor (YouTubeKit isn't Sendable), writes to documents/videos/<videoId>.mp4, and records a DownloadedVideo row in the local SwiftData container so the app knows what's on disk across launches. VideoActionsButtonRow is the unified UI for both detail views: three large buttons — Stream (red, always enabled), Download (blue, disabled while in flight and after completion, shows progress), Play (green, enabled only when downloaded). Full-screen cover on tap. Settings gains a Downloaded Videos list with swipe-delete, total-size summary, and a 500 MB warning. Local store reset version bumped to 4 for the new DownloadedVideo schema. Known fragility: YouTubeKit scrapes YouTube's private stream API and will break when YouTube changes their internal format. Streaming keeps working regardless. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
16 lines
394 B
Plaintext
16 lines
394 B
Plaintext
{
|
|
"originHash" : "1b6ada17bf1104878f9520a6f7cb3cd84338c0da74dc3761cef075709d7df45d",
|
|
"pins" : [
|
|
{
|
|
"identity" : "youtubekit",
|
|
"kind" : "remoteSourceControl",
|
|
"location" : "https://github.com/alexeichhorn/YouTubeKit.git",
|
|
"state" : {
|
|
"revision" : "65be95dbb1dbd749499e0638871568c823822276",
|
|
"version" : "0.4.8"
|
|
}
|
|
}
|
|
],
|
|
"version" : 3
|
|
}
|