mirror of
https://github.com/yattee/yattee.git
synced 2026-05-12 02:17:46 +00:00
Add tvOS Top Shelf extension
Surfaces Continue Watching, Recent Feed, and Recent Bookmarks in the
Apple TV Home top shelf when Yattee is focused. Tapping a tile opens
the video via the existing yattee://video/{id} deep link.
- New YatteeTopShelf app extension target (tvOS only). LD_ENTRY_POINT is
overridden to _NSExtensionMain; the tv-app-extension product type
defaults to _TVExtensionMain which is for the pre-tvOS-13 legacy API
and crashes modern TVTopShelfContentProvider subclasses at launch.
- Main app writes per-section JSON snapshots (capped at 10 items each)
to a shared App Group UserDefaults suite after bookmark, watch-history,
and feed-cache changes, plus an initial write on launch.
- Enabled-sections list is mirrored to the same App Group so the
extension can respect the user's selection without touching SwiftData.
- Settings → Top Shelf (tvOS only) lets the user toggle sections.
- Deep link playback shows a loading toast while video details are
fetched, and an error toast if no source is configured.
This commit is contained in:
@@ -1873,6 +1873,39 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"deepLink.loading.title" : {
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Loading video…"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"deepLink.noInstance.subtitle" : {
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "No source is configured for this video."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"deepLink.noInstance.title" : {
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Can't open video"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"discovery.empty.description" : {
|
||||
"comment" : "Description when no network shares are found",
|
||||
"localizations" : {
|
||||
@@ -4953,26 +4986,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mediaBrowser.unsupportedFile.title" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Unsupported file"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mediaBrowser.unsupportedFile.message %@" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "%@ cannot be played. This file type is not supported."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mediaBrowser.sort.dateCreated" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
@@ -5003,6 +5016,26 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mediaBrowser.unsupportedFile.message %@" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "%@ cannot be played. This file type is not supported."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mediaBrowser.unsupportedFile.title" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Unsupported file"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mediaBrowser.viewOptions.ascending" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
@@ -14140,6 +14173,39 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings.topShelf.sections.footer" : {
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Enabled sections appear in the Apple TV Home top shelf when Yattee is focused."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings.topShelf.sections.header" : {
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Sections"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings.topShelf.title" : {
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Top Shelf"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings.translators.empty" : {
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
|
||||
Reference in New Issue
Block a user