Skip to content

add media bar modes#142

Open
harleykradovill wants to merge 21 commits into
Moonfin-Client:masterfrom
harleykradovill:mediabarstyles
Open

add media bar modes#142
harleykradovill wants to merge 21 commits into
Moonfin-Client:masterfrom
harleykradovill:mediabarstyles

Conversation

@harleykradovill

@harleykradovill harleykradovill commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

Pull Request

Summary

This PR adds 4 new media bar display styles to match the core app. The media bar mode comes with the ability to change instantly, as well as syncs to the Moonbase plugin. It also comes with parallelization of API requests to get media bar items, which was necessary as startup time was negatively impacted initially.

Related Issues

Type of Change

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

Changes Made

New Features

  • MakD Style: Blurred backdrop with lower quality image, centered layout, hidden info bg & overview text.
  • Banner Style: Compact backdrop anchored at top, homeRows remain visible.
  • Gallery Style: MarkupGrid component with 5 items per page, different style for narrow/wide content.
  • Bookshelf Style: MarkupGrid component with dynamic items per page, centered and larger active item, random blendColor for book color.
  • The new modes are able to be changed instantly, rather than requiring a restart of the app.

Refactoring

  • applyMediaBarLayout(): Centralized media bar/home rows visibility and backdrop sizing/local into a single function in Home.bs, replacing 6 duplicated code blocks
  • refreshDisplay(): Extracted mode-aware display refresh in MediaBar.bs, replacing duplicated code in onFocusChanged(), onVisibilityChanged(), refreshCurrentDisplay()
  • startBackdropCrossfade(): Deduplicated backdrop crossfade logic into a single function in Home.bs
  • buildBackdropUrl()/buildItemUrls(): Separated URL construction from processItem() to support mode switching without re-processing item data
  • filterAndDedupeItems(): Moved filtering/deduping logic from MediaBar.bs in to MediaBarTask.bs for parallel processing

Performance

  • Parallelized API requests: MediaBarTask.bs now fires concurrent async requests per library and collects results via message port. Necessary to keep app startup times within acceptance times after adding these new styles.
  • Moved client-slide dedupe in to the task, freeing up the render thread.

Testing

  • Tested syncing settings between an Android TV and this app, seems to work.
  • Tested using BSProfiler and Roku Resmon to ensure the changes didn't negatively affect app performance.

Tried to cover as many edge cases that I could, but something may always slip through. I would appreciate if more people/testers could test switching between modes to identify issues I may have missed.

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

Screenshots (if applicable)

Moonfin (same as before)

screenshot-2026-07-10-13 00 20 248

MakD

screenshot-2026-07-10-13 01 13 122

Banner

screenshot-2026-07-10-13 01 26 460

Gallery
image

Bookshelf
image

Checklist

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

@harleykradovill harleykradovill changed the title add MakD media bar style add media bar styles Jul 9, 2026
@jmawet

jmawet commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator

The Moonbase Plugin does not sync the media bar style setting from what I could find. The API only returns the mode when it is set as a default in the plugin settings.

When I first implemented the mediaBarMode setting in #128 to match moonbase I tested and it synced correctly with my other devices after I changed it on Roku.

Are you saying that if moonbase has it as "not set (user decides)" then it won't push from devices to each other? I do have it default as "off", but if I changed it on my Roku it synced to other devices as far as I could tell

@harleykradovill

Copy link
Copy Markdown
Collaborator Author

The Moonbase Plugin does not sync the media bar style setting from what I could find. The API only returns the mode when it is set as a default in the plugin settings.

When I first implemented the mediaBarMode setting in #128 to match moonbase I tested and it synced correctly with my other devices after I changed it on Roku.

Are you saying that if moonbase has it as "not set (user decides)" then it won't push from devices to each other? I do have it default as "off", but if I changed it on my Roku it synced to other devices as far as I could tell

Ignore what I said, setting sync is working now

@harleykradovill harleykradovill changed the title add media bar styles add media bar modes Jul 11, 2026
@harleykradovill harleykradovill marked this pull request as ready for review July 11, 2026 20:23
@RadicalMuffinMan

Copy link
Copy Markdown

This is insanity hahaha I love it

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 media bar styles

3 participants