Skip to content

bugfix-sync - Add Task to Sync Custom Homerows/Keep Them Warm - #268

Open
mattsigal wants to merge 1 commit into
Moonfin-Client:masterfrom
mattsigal:feature/custom-rows-scheduled-sync
Open

bugfix-sync - Add Task to Sync Custom Homerows/Keep Them Warm#268
mattsigal wants to merge 1 commit into
Moonfin-Client:masterfrom
mattsigal:feature/custom-rows-scheduled-sync

Conversation

@mattsigal

@mattsigal mattsigal commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

Pull Request

Summary

So, it turns out the Custom Home Rows, after being defined, were never automatically updated (until a user manually forces their refresh). To address this are 2 PRs -- one on Moonbase's side (which adds a scheduled task to ensure data is pulled) and one on the client side. This PR adds a scheduled background task (CustomRowsSyncTask) that proactively warms and refreshes custom external home rows (Letterboxd, TMDB, and MDBList custom user lists) configured across user profiles daily at 4:00 AM (and on server startup), and introduces a shared CustomRowFetchService for unified list fetching across the scheduled task and the /Moonfin/CustomRows/Items HTTP endpoint.

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.

  • CustomRowsSyncTask.cs: Created scheduled task (Moonfin Custom Lists Sync, key: Moonfin.CustomRows.Sync) running daily at 4:00 AM and on startup that scans user home section configurations, deduplicates enabled custom rows, and refreshes the cache.
  • CustomRowFetchService.cs: Extracted shared fetching and resolution logic for Letterboxd RSS, TMDB lists/collections/charts, MDBList user lists, and IMDb charts.
  • CustomRowController.cs: Streamlined controller to delegate custom row resolution to CustomRowFetchService.
  • MoonfinSettingsService.cs: Added GetAllUserSettingsAsync() to inspect user profiles for configured custom rows.
  • PluginServiceRegistrator.cs: Registered CustomRowFetchService with dependency injection.

Client Impact

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

  • No client changes needed (a related PR will be made on Core but they aren't dependent on each other)
  • Companion client PR(s) required, linked here:
  • New setting keys added. List each key and confirm it matches the client key exactly, including casing:

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:) Web UI client
  • Manual testing completed
  • Not tested (explain why):

Test Steps

  1. Built the release plugin DLL and deployed to live Jellyfin server.
  2. Verified that Moonfin Custom Lists Sync appears under Scheduled Tasks in the Jellyfin Admin Dashboard.
  3. Manually triggered the task and verified in server logs that it successfully discovered configured Letterboxd rows, fetched upstream items/posters, and updated the cache in 2 seconds.

Screenshots (if applicable)

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

Previously...

External home rows (like the Letterboxd activity feed) would only refresh if this button was clicked:

2026-09-01_10-41-16_moonfin

New Scheduled Task:

2026-09-01_10-57-33_brave 2026-09-01_10-57-41_brave 2026-09-01_10-59-12_brave 2026-09-01_10-59-56_brave

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

Scan configured custom home sections across user profiles and proactively
refresh Letterboxd, TMDB, and MDBList custom user lists daily at 4:00 AM.
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown

Build Successful

The plugin compiled successfully against .NET 8 / Jellyfin 10.10.0.

Property Value
Commit 056e1e5
Workflow Build #359

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.

1 participant