Skip to content

feat(tv): home row adjustmnets - #309

Merged
RadicalMuffinMan merged 5 commits into
Moonfin-Client:mainfrom
mattsigal:feature/tv-progressive-loading
Jul 16, 2026
Merged

feat(tv): home row adjustmnets#309
RadicalMuffinMan merged 5 commits into
Moonfin-Client:mainfrom
mattsigal:feature/tv-progressive-loading

Conversation

@mattsigal

Copy link
Copy Markdown
Collaborator

Changes Included:

  1. Performance & Query Optimization
  • Progressive Asynchronous Loading: Refactored fetchAllData to decouple the initial layout rendering (Guide, My Media, and Continue Watching) from slower, third-party/external API rows (IMDb, TMDb, Seerr, and recommendations). The main loading spinner is dismissed instantly once initial local rows render.
  • Staggered Loader Scheduler: Implemented a staggered loader manager using setTimeout at 300ms intervals. This spaces out the initial load of secondary rows (genres, collections, playlists, recos, IMDb) instead of firing 40+ concurrent database requests at the exact same millisecond. This resolves SQLite database locks, server CPU spikes, and request timeouts.
  • Merged CW & Next Up Fetch Protection: Added a .catch(() => null) fallback to the merge-items query to ensure that in-flight request aborts or timeouts do not reject the main dashboard promise group and crash page initialization.
  • Safeguarded cache spreads: Checked cachedRowData truthiness to prevent fatal TypeError: cachedRowData is not iterable crashes when browser storage caches are empty or reset.
  1. Layout, Row Ordering, and Syncing Fixes
  • Server/TV Key Bidirectional Mapping: Standardized key mapping in rowOrderMap and enabledRowIdsSet to check both TV-style hyphenated IDs (e.g. latest-media, recently-released) and server-style unhyphenated IDs (e.g. latestmedia, recentlyreleased). This resolves issues where "Recently Added" and "Recently Released" rows disappeared or were assigned bad sorting weights during boot.
  • Automatic Settings Synchronization: Added a useEffect hook to trigger settings synchronization from the server immediately upon user authentication to automatically enable the Moonbase sync plugin on reload/recompile.
  • Prevented Re-render Loops: Added a deep validation check to syncFromServer's settings setter to return the unchanged state reference if no properties changed, eliminating React context consumer re-render loops.
  1. Media Card & Asset Fixes
  • Genre Representative Pipe Delimiter: Corrected unmatched genre item search requests by joining genre names with the pipe character (|) instead of a comma (,). Commas caused Jellyfin to look for a non-existent genre named literally Action,Comedy,Drama, returning empty results and preventing sample images from loading.
  • Letterboxd Ratings Display: Corrected the truthiness validation of showUserRatings inside externalHomeRows.js to show star reviews by default when undefined.
  • External Row Backdrop Focus: Resolved focus issues where backdrop URLs failed to load for external list items (IMDb, Letterboxd, Seerr).

THINGS NOT WORKING:

  1. Recently Added rows are not being pulled in
  2. Row requests need optimization, they are opening too many connections and thrashing the server.
  3. The My Media items are not expanding as a "Modern" row
  4. The Genres tiles aren't using the custom logic to use a sample item's backdrop/poster instead of Jellyfin's thumbnail.
  5. The IMDb/TMDb rows aren't pulling in backdrops for the focused view.

@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown

✅ Build Successful

All platform builds passed. You can download the test artifacts below.

Platform Status Artifact
webOS ✅ Passed Moonfin_webOS_*.ipk
Tizen Regular ✅ Passed Moonfin_Tizen_Regular_*.wgt
Tizen Oblong ✅ Passed Moonfin_Tizen_Oblong_*.wgt
Tizen Legacy ✅ Passed Moonfin_Tizen_Legacy_*.wgt
Property Value
Commit c0a1310
Workflow run Build #164

mattsigal and others added 2 commits July 15, 2026 20:35
…nre/rating fixes

- Implemented progressive, non-blocking background loading of home screen rows. Dismisses the initial loading spinner immediately once local Guide, My Media, and Continue Watching rows are available.
- Added a staggered loader scheduler with a 300ms delay between background loads (genres, collections, playlists, recos, IMDb, etc.) to prevent high concurrency SQLite database spikes, locks, and request timeouts on the Jellyfin server.
- Fixed unmatched genres search parameter formatting by joining names with pipe (|) instead of comma (,), allowing Jellyfin to return correct representative posters for genre cards.
- Integrated automatic settings synchronization immediately upon login to enable instant Moonbase sync plugin discovery on page reloads/recompiles.
- Optimized settings server sync comparisons in SettingsContext.js to prevent unnecessary React context consumer re-render loops.
- Resolved issue where home row ordering and visibility filter checks (e.g. latest media, recently released) failed due to mismatching server-style unhyphenated keys (latestmedia) and TV-style hyphenated keys (latest-media) by mapping both key styles bidirectionally.
- Fixed backdrop images on focus for external lists (IMDb, Letterboxd, Seerr) and prevented invalid Jellyfin database calls on custom media items.
- Safeguarded cachedRowData spreads against null-reference TypeErrors.
- Corrected external row ratings truthiness check to display Letterboxd star ratings by default.
@RadicalMuffinMan
RadicalMuffinMan force-pushed the feature/tv-progressive-loading branch from 78d27d0 to 61c591d Compare July 16, 2026 01:25
@RadicalMuffinMan
RadicalMuffinMan merged commit 6a817dd into Moonfin-Client:main Jul 16, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants