Skip to content

feature-homerows - Port remaining internal home rows to Roku - #160

Open
mattsigal wants to merge 10 commits into
Moonfin-Client:masterfrom
mattsigal:feature/roku-internal-home-rows
Open

feature-homerows - Port remaining internal home rows to Roku#160
mattsigal wants to merge 10 commits into
Moonfin-Client:masterfrom
mattsigal:feature/roku-internal-home-rows

Conversation

@mattsigal

@mattsigal mattsigal commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

Pull Request

Summary

Ported the internal home screen rows configuration toggles (Favorites, Collections, Genres, Playlists, and Audio) from Moonfin-Core to Roku, allowing these rows to be toggled individually and mapped to Home Screen Section selections (1-8).

Related Issues

Link related issues or tickets separated by commas.

Type of Change

  • Bug fix
  • New feature
  • Refactor
  • Performance improvement
  • UI/UX update
  • Documentation update
  • Build/CI change
  • Other (describe):

Changes Made

List the key changes included in this PR.

  • Added toggles in settings.json under "Home Screen" for "Show Favorites Rows", "Show Collections Rows", "Show Genres Rows", "Show Playlists Rows", and "Show Audio Rows".
  • Mapped all five toggles in settingsSync.bs to sync local preferences with the Jellyfin server plugin Settings Sync.
  • Intercepted home screen section option lists (Sections 1-8) in settings.bs to hide/show Favorites and dynamically append Collections, Genres, Playlists, and Audio options based on toggles.
  • Implemented loadCollections(), loadGenres(), and loadAudio() inside LoadItemsTask.bs using API requests to fetch appropriate content nodes.
  • Added row drawing and update handlers in HomeRows.bs for collections, genres, playlists, and audio.
  • Added genre click navigation routing in MainEventHandlers.bs to push VisualLibraryScene filtered by the selected genre name.

Testing

Describe how this change was tested.

  • Tested on physical Roku device
  • Tested via sideload
  • Manual testing completed
  • Not tested (explain why): Paging @jmawet

Test Steps

  1. Navigate to Settings -> Moonfin Settings -> Home Screen -> Home Row Toggles.
  2. Toggle on "Show Collections Rows", "Show Genres Rows", "Show Playlists Rows", and "Show Audio Rows".
  3. Verify that these options are now selectable in "Home Rows" section slots (Sections 1-8).
  4. Assign "Genres" or "Collections" to a slot, return to the Home Screen, and verify that the row renders correctly and opens the appropriate item lists/views upon selection.

Screenshots (if applicable)

Include screenshots or recordings for UI changes.

Checklist

  • Code builds successfully
  • Code follows project style and conventions
  • No unnecessary commented-out code
  • No new warnings introduced

mattsigal and others added 6 commits July 20, 2026 14:53
- Declared additionalData on LoadItemsTask.xml.
- Implemented loadCustomDynamicList in LoadItemsTask.bs to handle custom rows (IMDb/TMDb/Seerr/mdblist/letterboxd).
- Implemented createCustomDynamicRow and updateCustomDynamicRowItems in HomeRows.bs to render custom rows.
- Packed SeerrItem on dynamic nodes to support navigation to SeerrDetailsScreen on selection.
@jmawet

jmawet commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

these rows appear to be working, just 2 notes that are the same on the external rows pr so if you fix it there it should fix here too

  1. this also needs my pr for settingsSync fixes to avoid crashing lol
  2. I am able to enable the genres/collections/etc rows no problem, but similar to the seerr row, the position is 2-3 above what it should be?

so if you can fix everything in #158 and update this one with the same changes, we should be good to go here

@jmawet

jmawet commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator
image image

- Use getOriginalSectionIndex to insert favorites, mylist, nextup, and custom dynamic rows into their settings-configured slots.
- Initialize paramsJson to "{}" to prevent the Jellyfin server plugin from throwing a 400 Bad Request error when loading IMDb list rows.
- Introduce a stable `sortHomeRows()` function in `HomeRows.bs` using insertion sort on settings indices to resolve row ordering bugs.
- Centralize row insertion and replacement in a new `addOrUpdateHomeRow()` helper.
- Update favorites, mylist, resume, nextup, and custom dynamic lists to use the new helper, preserving the configured order regardless of asynchronous load speed.
- Add toggles in settings.json and map them in settingsSync.bs to support Settings Sync.
- Dynamically filter and append Favorites, Collections, Genres, Playlists, and Audio row options under Home Rows configuration.
- Implement data loading for collections, genres, and audio, and row creation/updating in HomeRows.bs.
- Add event routing in MainEventHandlers.bs to support browsing items under selected genre cards from the Home Screen.
- Set the `id` property on collections, genres, playlists, and audio placeholder rows on creation.
- Update internal lists (collections, genres, playlists, audio) in `HomeRows.bs` to use the new `addOrUpdateHomeRow()` helper, ensuring they are automatically sorted 1:1 with user section settings.
@mattsigal
mattsigal force-pushed the feature/roku-internal-home-rows branch from 8abfb09 to 8bb1c15 Compare July 21, 2026 04:07
@jmawet

jmawet commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator
image

winner winner chicken dinner

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.

[Feature] New moonbase row sorting [Feature] Genres/Collections/Favorites rows

2 participants