Skip to content

feat-details - Add User Defaults for granular media description visibility - #327

Open
mattsigal wants to merge 1 commit into
Moonfin-Client:masterfrom
mattsigal:feature/expand-hide-media-description
Open

mattsigal wants to merge 1 commit into
Moonfin-Client:masterfrom
mattsigal:feature/expand-hide-media-description

Conversation

@mattsigal

@mattsigal mattsigal commented Oct 16, 2026 •

Copy link
Copy Markdown
Collaborator

Pull Request

Summary

Adds 11 nullable boolean settings to MoonfinSettingsProfile DTOs and admin configuration pages for Jellyfin and Emby to support granular control over media description visibility on detail pages across clients. This allows both syncing and pushing of the new settings and also allows users to hide details on local content but show them on Seerr content (or vice versa, whatever makes them happy!).

Related Issues

Link related issues or tickets separated by commas.

Type of Change

  • Bug fix
  • New feature
  • Refactor
  • Performance improvement
  • API / endpoint change
  • Settings schema change
  • Documentation update
  • Build/CI change
  • Other (describe):

Area

  • Settings sync / profiles
  • Admin defaults / config page
  • Ratings (MDBList / TMDB)
  • Notifications / Push (FCM / relay)
  • Seerr integration
  • Games / Emulators
  • Custom home rows
  • Web Client (Go to Moonfin-Core repo)
  • Other / shared

Changes Made

List the key changes included in this PR.

  • Added 11 nullable boolean properties to MoonfinSettingsProfile.cs for Jellyfin and Emby:
    • hideDetailsMediaDescriptionMovie
    • hideDetailsMediaDescriptionShow
    • hideDetailsMediaDescriptionSeason
    • hideDetailsMediaDescriptionEpisode
    • hideDetailsMediaDescriptionBoxSet
    • hideDetailsMediaDescriptionBook
    • hideDetailsMediaDescriptionPerson
    • hideDetailsMediaDescriptionMusic
    • hideDetailsMediaDescriptionSeerrMovie
    • hideDetailsMediaDescriptionSeerrShow
    • hideDetailsMediaDescriptionSeerrCollection
  • Added dropdown controls, defaults loaders (setNullableBoolSelect), and getters (getNullableBoolSelect) in configPage.html for Jellyfin.
  • Added controls, initialization, and save logic in configPage.html and moonfin.js for Emby.

Client Impact

Does this need matching changes in a client repo (Core, Smart-TV, Roku)?

Compatibility

  • Change to the settings profile is additive only, no renamed or removed properties
  • New properties use the same type the client sends (a client bool maps to bool?, an int to int?)
  • Migration added for any renamed or removed settings
  • Older clients still work, unknown fields are ignored and no keys were removed

Testing

Describe how this change was tested.

  • Built the plugin and deployed to a Jellyfin server
  • Verified against a live client (which one:) Android TV, Windows Desktop
  • Manual testing completed
  • Not tested (explain why):

Test Steps

  1. Built release DLL and deployed to Jellyfin on Synology NAS.
  2. Verified unit test suite passed (475/475 tests passing).
  3. Connected Moonfin-Core client and verified settings sync and profile defaults.

Screenshots (if applicable)

Include config page screenshots or request/response samples where relevant.

moonbase1 moonbase2

Checklist

  • Code builds successfully
  • Code follows project style and conventions
  • No unnecessary commented-out code
  • No new warnings introduced
  • Any new setting keys match the client-side keys exactly

Add 11 nullable boolean settings to MoonfinSettingsProfile DTOs
and admin configuration pages for Jellyfin and Emby to support
granular control over media description visibility on detail pages.
@coderabbitai

coderabbitai Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: Moonfin-Client/Plugin/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 337a7698-d7ac-47cb-aba0-13d1e1ff94d3
📥 Commits

Reviewing files that changed from the base of the PR and between 9b9ee1e and 0b8a683.

📒 Files selected for processing: 5
  • Emby/Emby.Plugins.Moonfin/Models/MoonfinSettingsProfile.cs
  • Emby/Emby.Plugins.Moonfin/Pages/configPage.html
  • Emby/Emby.Plugins.Moonfin/Pages/moonfin.js
  • Jellyfin/backend/Models/MoonfinSettingsProfile.cs
  • Jellyfin/backend/Pages/configPage.html

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

📝 Summary

Summary by CodeRabbit

  • New Features
    • Added separate default options to hide descriptions or biographies for movies, shows, seasons, episodes, collections, books, people, and music.
    • Added matching options for Seerr movies, shows, and collections. Each option can be set to Yes, No, or Not set (user decides).
    • Retained the previous hide-description setting as “Hide Description (Legacy).”

Emby and Jellyfin add nullable default settings to hide descriptions by local media type and Seerr type. Their configuration pages add corresponding controls and load and save the settings. The existing general description control remains and is labeled as legacy.

Changes: Description visibility settings

Layer / File(s) Summary
Add per-type settings
Emby/Emby.Plugins.Moonfin/Models/MoonfinSettingsProfile.cs, Jellyfin/backend/Models/MoonfinSettingsProfile.cs
Both settings profiles add nullable Boolean properties for eight local media types and three Seerr types. Each property has a matching JSON key.
Add per-type controls
Emby/Emby.Plugins.Moonfin/Pages/configPage.html, Jellyfin/backend/Pages/configPage.html
Both configuration pages relabel the existing description control as legacy and add nullable controls for local and Seerr media types.
Load and save defaults
Emby/Emby.Plugins.Moonfin/Pages/moonfin.js, Jellyfin/backend/Pages/configPage.html
The configuration code loads and saves the eleven per-type settings as nullable Boolean values.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~15 minutes

Suggested reviewers: radicalmuffinman

Merge Risk: ⚪ Minimal · up to 0b8a6

The new defaults preserve “user decides,” Yes, and No through both configuration pages. No identified issue blocks merging after normal checks.

Security architecture risk: 🔵 Low · up to 0b8a6

This is an additive change to presentation preferences. The inspected paths retain existing permissions and user targeting, with no demonstrated security regression. Compatibility across client versions and behavior during concurrent administrator saves remain incompletely verified.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • observed — The existing administrator defaults mechanism can propagate these preferences across users of the configured server, including through an overwrite mode that resets profiles. The PR does not add that cross-user authority or change its targeting mechanism.

Trust Boundaries and Controls

  • observed — Inspected defaults-push routes retain Admin authorization on Emby and RequiresElevation on Jellyfin. Resolved-profile retrieval derives the user identity from the authenticated request rather than from the new preference fields. These checks do not establish the authorization implementation of the separate host-managed configuration endpoint.

Resilience and Maintainability Implications

  • observed — Jellyfin's existing user-profile writes serialize access with a semaphore and release it in finally blocks. Bulk defaults merging clones defaults for each user and catches individual failures, containing mutable-object sharing and allowing partial progress rather than providing all-user atomicity. The new fields reuse these unchanged mechanisms.
Pre-merge checks: Passed 4
Check name Status Explanation
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Title check Passed The title clearly identifies the addition of user defaults for granular media description visibility. It is concise and directly matches the main changes.
Description check Passed The description follows the repository template and covers the summary, issue reference, change type, affected areas, setting keys, client impact, compatibility, testing, screenshots, and checklist. I…
Full details: Description check

Explanation

The description follows the repository template and covers the summary, issue reference, change type, affected areas, setting keys, client impact, compatibility, testing, screenshots, and checklist. It provides sufficient implementation and validation details.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

Build Successful

Both plugins compiled against .NET 8, and both test suites passed.

Property Value
Commit 0b8a683
Jellyfin ABI 10.10.0.0
Emby version 2.4.0.0
Workflow Build #492

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant