Skip to content

Add server profile sync mappings for PR 217/218 fields and Implementations - #199

Merged
RadicalMuffinMan merged 14 commits into
Moonfin-Client:masterfrom
mattsigal:feature/roku-settings-sync-parity
Aug 7, 2026
Merged

Add server profile sync mappings for PR 217/218 fields and Implementations#199
RadicalMuffinMan merged 14 commits into
Moonfin-Client:masterfrom
mattsigal:feature/roku-settings-sync-parity

Conversation

@mattsigal

@mattsigal mattsigal commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Pull Request

Summary

Add support for Moonbase settings sync parity on Roku, including syncing subtitle mode, subtitle language, default audio language, and audio preferences directly to Jellyfin User Configuration when pulling from Moonbase (PR #217 and PR #218).

Also includes some implementations of settings that were ready to sync for Smart-TV but weren't implemented in Roku yet.

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 server profile sync mappings in GetMappings() in settingsSync.bs for playback time bar customization: musicPlaybackTimeDisplay (playback.musicTimeDisplay), playbackTimeAboveLeft/Center/Right (playback.timeAboveLeft/Center/Right), playbackTimeBelowLeft/Center/Right (playback.timeBelowLeft/Center/Right).
  • Added row visibility & display options: collectionsRowShowEpisodes, playlistsRowShowEpisodes, mergeRecentRowsByType.
  • Added Action Buttons & Seerr Discovery Row order array mappings: detailButtonOrder (ui.itemdetail.buttonOrder), hiddenDetailButtons (ui.itemdetail.hiddenButtons), seerrRowOrder (seerr.rowOrder), hiddenSeerrRows (seerr.hiddenRows).
  • Added navigation, personalization, & browsing options: showCastButton (navbar.show_cast), classicHomeRowsPadding, modernHomeRowsPadding, detailShowTechnicalDetails, recommendationSystemSource, recommendationsApplyParentalRatingCap, screensaverMode.
  • Added mappings in settingsSync.bs for subtitleMode, defaultSubtitleLanguage, defaultAudioLanguage, and preferDefaultAudioTrack.
  • Added automatic update to m.global.session.user.Configuration in PullFromServer() whenever Moonbase pushes down new subtitle mode or language preferences.
  • Added subtitleModeFormat conversion handlers between Moonbase strings (default, always, onlyforced, none) and Jellyfin user config enum values (Default, Always, OnlyForced, None).
  • Implemented Resume Rewind (playback.resumeRewind) in LoadVideoContentTask.bs when starting playback from a bookmark.
  • Implemented Unpause Rewind (playback.unpauseRewind) in VideoPlayerView.bs when resuming from pause.
  • Implemented configurable Skip Forward Length and Skip Back Length (playback.skipForwardLength, playback.skipBackLength) for LEFT/RIGHT remote key seeking in VideoPlayerView.bs.
  • Implemented Show Description on Pause (playback.showDescriptionOnPause) visibility control on the pause overlay in VideoPlayerView.bs.

Testing

Describe how this change was tested.

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

Test Steps

  1. Validated settingsSync mapping structure and type conversions.
  2. Verified key matching and status tracking via MoonSync scanner diff.

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 mattsigal changed the title Add server profile sync mappings for PR 217/218 fields Add server profile sync mappings for PR 217/218 fields and Implementations Aug 5, 2026
@jmawet

jmawet commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

do you wanna convert this to draft until it's ready?

@mattsigal

Copy link
Copy Markdown
Collaborator Author

I updated it last night with the implementations :) Guess you missed the wall of text in our discord chat hey? haha

@mattsigal

Copy link
Copy Markdown
Collaborator Author

These were already implemented:

  • Cinema Mode (cinemaModeEnabled -> playback.cinemamode)
  • Autoplay Next Episode (autoplayNextEpisode -> playback.showNextUpAfterFinish)
  • Next Up Timeout (nextUpTimeout -> playback.nextupbuttonseconds)
  • Subtitle Mode (subtitleMode -> user.Configuration.SubtitleMode)
  • Default Subtitle Language (defaultSubtitleLanguage -> user.Configuration.SubtitleLanguagePreference)
  • Default Audio Language (defaultAudioLanguage -> user.Configuration.AudioLanguagePreference)
  • Prefer Default Audio Track (preferDefaultAudioTrack -> user.Configuration.PlayDefaultAudioTrack)*

These weren't implemented yet, but were added to the PR:

  • Resume Rewind (resumeSubtractDuration) - added (needs testing)
  • Unpause Rewind (unpauseRewindDuration) - added (needs testing)
  • Skip Forward / Skip Back Length (skipForwardLength, skipBackLength) - added (needs testing)
  • Prefer SDH / Audio Description - added (needs testing)

These have been removed:

  • Skip Intros / Outros & Next Up Countdown Style (introAction, nextUpCountdownStyle, replaceSkipOutroWithNextUp); Subtitle Customization (subtitlesTextColor, subtitlesBackgroundColor, subtitlesTextSize) -- unfortunately, these look to be impossible at least for now so I removed them from the Moonbase panel so it only has things that all the clients can sync
  • Show Description on Pause (showDescriptionOnPause) - this is feasible but annoying so i removed it too haha

Add UI setting toggle entries for Resume Rewind, Unpause Rewind, Skip Forward Length, Skip Back Length, Prefer SDH Subtitles, Prefer Audio Description, and Show Description on Pause.
Remove Show Description on Pause entry as requested.
@mattsigal

Copy link
Copy Markdown
Collaborator Author

You know what would have been helpful though? Some toggles 🤦

- Place Resume Rewind, Unpause Rewind, Skip Forward Length, and Skip Back Length under Video Playback Preferences.
- Place Prefer Audio Description under Audio Preferences.
- Place Prefer SDH Subtitles under Subtitle Preferences.
@jmawet

jmawet commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

pending to implement:

            { pluginKey: "playbackTimeAboveLeft", rokuKey: "playback.timeAboveLeft", type: "direct" },
            { pluginKey: "playbackTimeAboveCenter", rokuKey: "playback.timeAboveCenter", type: "direct" },
            { pluginKey: "playbackTimeAboveRight", rokuKey: "playback.timeAboveRight", type: "direct" },
            { pluginKey: "playbackTimeBelowLeft", rokuKey: "playback.timeBelowLeft", type: "direct" },
            { pluginKey: "playbackTimeBelowCenter", rokuKey: "playback.timeBelowCenter", type: "direct" },
            { pluginKey: "playbackTimeBelowRight", rokuKey: "playback.timeBelowRight", type: "direct" },
            { pluginKey: "musicPlaybackTimeDisplay", rokuKey: "playback.musicTimeDisplay", type: "direct" },

            { pluginKey: "collectionsRowShowEpisodes", rokuKey: "ui.home.collectionsRowShowEpisodes", type: "bool" },
            { pluginKey: "playlistsRowShowEpisodes", rokuKey: "ui.home.playlistsRowShowEpisodes", type: "bool" },
            { pluginKey: "showCastButton", rokuKey: "navbar.show_cast", type: "bool" },
            { pluginKey: "classicHomeRowsPadding", rokuKey: "ui.home.classicRowsPadding", type: "direct" },
            { pluginKey: "modernHomeRowsPadding", rokuKey: "ui.home.modernRowsPadding", type: "direct" },
            { pluginKey: "detailShowTechnicalDetails", rokuKey: "ui.library.showTechnicalDetails", type: "bool" },
            { pluginKey: "recommendationSystemSource", rokuKey: "ui.home.recommendationSource", type: "direct" },
            { pluginKey: "recommendationsApplyParentalRatingCap", rokuKey: "ui.home.recommendationsParentalCap", type: "bool" },
            { pluginKey: "screensaverMode", rokuKey: "screensaver.mode", type: "direct" },
            { pluginKey: "seerrRowOrder", rokuKey: "seerr.rowOrder", type: "jsonArray" },
            { pluginKey: "hiddenSeerrRows", rokuKey: "seerr.hiddenRows", type: "jsonArray" },
            { pluginKey: "detailButtonOrder", rokuKey: "ui.itemdetail.buttonOrder", type: "jsonArray" },
            { pluginKey: "hiddenDetailButtons", rokuKey: "ui.itemdetail.hiddenButtons", type: "jsonArray" },

I believe none of these exist in roku currently

@mattsigal
mattsigal marked this pull request as draft August 5, 2026 21:22
@mattsigal

Copy link
Copy Markdown
Collaborator Author

Thanks for the list. Converting to draft while I look through them.

…json

Add settings.json definitions for:
- showCastButton (navbar.show_cast)
- collectionsRowShowEpisodes (ui.home.collectionsRowShowEpisodes)
- playlistsRowShowEpisodes (ui.home.playlistsRowShowEpisodes)
- classicHomeRowsPadding (ui.home.classicRowsPadding)
- modernHomeRowsPadding (ui.home.modernRowsPadding)
- recommendationSystemSource (ui.home.recommendationSource)
- recommendationsApplyParentalRatingCap (ui.home.recommendationsParentalCap)
- detailShowTechnicalDetails (ui.library.showTechnicalDetails)
- musicPlaybackTimeDisplay (playback.musicTimeDisplay)
- playbackTimeAboveLeft/Center/Right & playbackTimeBelowLeft/Center/Right (playback.timeAbove/Below...)
- screensaverMode (screensaver.mode)
@mattsigal
mattsigal force-pushed the feature/roku-settings-sync-parity branch from c301565 to e8e2e5c Compare August 5, 2026 21:53
@mattsigal
mattsigal force-pushed the feature/roku-settings-sync-parity branch from ccbdedc to 43dace9 Compare August 5, 2026 21:55
@jmawet

jmawet commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator
{ pluginKey: "collectionsRowShowEpisodes", rokuKey: "ui.home.collectionsRowShowEpisodes", type: "bool" },
            { pluginKey: "playlistsRowShowEpisodes", rokuKey: "ui.home.playlistsRowShowEpisodes", type: "bool" },
            { pluginKey: "showCastButton", rokuKey: "navbar.show_cast", type: "bool" },

these I would recommend leaving these out for now. I don't think you can cast from roku to other devices, and the playlist/collection individual rows are still having issues so the other 2 aren't useful yet

screensaver/recommendation system I'm not sure are supported in roku? may not need these either

playback time display, details buttons hide/order, home screen padding, seerrrows (for seerr tab I assume? different than home row?), showtechnicaldetails <- these should all be possible to implement. Not sure which you want to include in this pr or if it'd be better to do a pr for each of the features individually. Up to you

@mattsigal
mattsigal force-pushed the feature/roku-settings-sync-parity branch from ee2214f to ea89d79 Compare August 5, 2026 22:02
@mattsigal
mattsigal force-pushed the feature/roku-settings-sync-parity branch from 4943958 to bc241f2 Compare August 5, 2026 22:11
@mattsigal
mattsigal force-pushed the feature/roku-settings-sync-parity branch from 4dd537e to bf6a07e Compare August 5, 2026 22:35
@RadicalMuffinMan
RadicalMuffinMan marked this pull request as ready for review August 7, 2026 04:58
@RadicalMuffinMan
RadicalMuffinMan merged commit 729d790 into Moonfin-Client:master Aug 7, 2026
1 check 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.

3 participants