Repository navigation
feat: unify VOD covers and add isolated personal alpha packaging - #5
Open
simonhagger wants to merge 25 commits into
Open
simonhagger wants to merge 25 commits into
simonhagger wants to merge 25 commits into
Conversation
Propagate strict read errors, guard favourite writes, defer PWA validation and share pure storage normalization. Verify browser recovery and current membership after async loading.
This branch has not been deployed
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.
Movie and series covers offered different actions and indicators across the Dashboard, catalogue, search and collections. This tranche gives them shared favourite, progress and attributed-rating indicators with a Material three-dot menu. It also adds an opt-in personal Windows distribution for using the fork independently of the standard app.
Series show Started and current episode progress. Completing one episode does not mark the whole show watched. Recent episode rows retain their own history/removal identity while Details and favourites resolve to the parent show. A show and episode sharing a provider ID remain separate. Unresolved parent actions are unavailable; Details never consumes an autoplay handoff. Closing inline Details refreshes saved cover state.
Failed membership or progress reads offer Retry, including progress-only failures in Favorites. Successful empty history stays distinct from an error. Recovery merges cover fields onto current rows, preserving removals, ordering and current persisted favourites. Newer requests/retries and disposal supersede old results. Keyboard menus restore focus without activating the cover. Catalogue E2E activates the primary cover button and waits for actual detail/title readiness while retaining its pagination and scroll-restoration assertions.
PWA strict membership reads propagate denied storage access, malformed maps, invalid snapshots and incomplete hydration. An absent key remains known-empty and historical numeric-string IDs remain supported. Favourite add/remove operations reject unsafe current membership before writing. Validation loads at the async PWA boundary, followed by a fresh storage read with no await before writing. Legacy public read fallbacks remain compatible and share one pure ID normalizer. The browser recovery journeys preserve exact saved membership and keep Details available while favourite state is unknown.
Shared presentation consumes immutable models and emits intent. Controllers perform one bulk position read per represented provider playlist, serialize favourite writes and read back persisted membership. Identity includes provider, playlist, content kind and provider ID. Complete membership reads avoid false negatives beyond 500 rows. Pure selectors resolve history and progress without mutating payloads. Translations, release notes and cover/state-ownership guidance accompany the change.
The personal packaging overlay preserves version 0.25.0 and uses a distinct app/installer identity and
~/.iptvnator-personal. It skips legacy-profile adoption and disables startup/manual updates, upstream release notes, downloads and update installation. Package metadata is validated before profile writes. Standard packaging retains its existing behavior. The private build keeps the explicit optimized production output; this PR does not publish a public release.Validation:
The first complete GitHub round passed 26 checks, including platform builds, units/typechecks, lint, performance and browser E2E. Three catalogue E2E shards failed in helpers corrected here. All collected repairs remain subject to a fresh complete CI round.
All local feature testing is on Windows. These features are alpha; macOS and Linux have not been manually tested. Tests use isolated profiles, mock providers and local media without subscription credentials. Native-speaker review of added locale text remains pending. The private installer will be delivered only after fork merge and verification of its actual packaged playback/PiP behavior.
Local Codex review is clean on
a47263183ee6b7c0fb19e505aec2ba6b6faf14f2. No findings were declined. Its automated checks could not run after an installed-lock comparison and aborted offline install; coordinator checks above passed with a normalized matching installed lock. Greptile CLI is unavailable, using the repository's documented exception.