Repository navigation
fix(web): load VOD addon collections natively and restore the Favorite TV row - #791
Merged
ProdigyV21 merged 2 commits intoOct 7, 2026
Merged
Conversation
Collections backed by an addon catalog failed with "Some sources could not be loaded", and their shows opened with "No episodes found". Addons installed on Android reach the web through cloud sync with an install id (<manifest id>_<hash>) and their catalogs, resources, types and idPrefixes only inside `manifest`. The collection lookup matched neither the id nor a catalog, so it threw before any request. normalizeAddon now falls back to the manifest's fields. The web also had no notion of addon titles without a TMDB identity: they got a positive hash id and every lookup went to TMDB. Port Android's AddonNativeCatalog as lib/addonNative.ts: a stable negative id with the same formula as Android (watch history ids agree), a localStorage registry mapping it back to the addon, details and episodes from the addon's /meta, and streams from the owning addon by the episode's own video id. TMDB logo/provider/review lookups, tracker writes and MDBList ratings skip ids below 1.
Android shows the profile's favorite IPTV channels as a "Favorite TV" row on Home; the web dropped the `favorite_tv` catalog entirely (its earlier web version filled the row with TMDB's top-rated shows instead). Keep `favorite_tv` in the catalog list so the row sits where the user placed it (or after the other rows when the list lacks it, as on Android) and render it from the IPTV favorites, in the user's order, minus hidden and locked groups. Playlists only load in Live TV and are too heavy for Home, so each loaded playlist saves a small per-profile copy of just the favorite channels (lib/favoriteTv.ts) and Home paints the row from it. The playlist loads quietly in the background only when no copy exists or a favorite was added since. Now/next shows once a playlist is loaded. Adds the "Favorite channels on Home" switch to Settings > TV (IPTV), synced with Android's `iptvFavoritesOnHome` profile setting. The new wording is plain English, so no translation dictionaries change.
silentbil
force-pushed
the
claude/vod-cards-load-error-076f62
branch
from
October 7, 2026 12:23
3116973 to
f4abdc5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two web fixes for parity with the Android app, one commit each.
1. Addon collections and native addon items (
fix(web))<manifest id>_<hash>) and their catalogs, resources, types and idPrefixes only insidemanifest. The collection lookup matched neither the id nor a catalog, so it threw before making any request.normalizeAddonnow falls back to the manifest's fields.lib/addonNative.tsports Android'sAddonNativeCatalog:/meta;2. Favorite TV home row (
feat(web))favorite_tvfrom the catalog list; its earlier web version filled the row with TMDB's top-rated shows.favorite_tvnow stays in the catalog list, so the row keeps the user's position. If the list lacks it, the row goes after the others, as on Android. It shows the IPTV favorites in the user's order, minus hidden and locked groups.lib/favoriteTv.ts), and Home draws the row from that copy. The playlist loads quietly in the background (refreshIptv({ quiet: true })) only when no copy exists or a favorite was added since.iptvFavoritesOnHomeprofile setting.Notes for reviewers
skip=), and Continue Watching fields for native items.containercheck fails oncalendar.test.cjs› "large episode batches coalesce progress…", that test is timing-sensitive (a 25 ms enrichment timeout) and fails intermittently on its own. It loads onlycalendarLoader.tswithtmdbmocked, which this PR doesn't change.Testing
node --test tests/*.test.cjs: all pass, with new tests inaddon-native.test.cjsandfavorite-tv.test.cjs. The first commit passes on its own.tsc --noEmit: no new errors.🤖 Generated with Claude Code