Skip to content

feat(cloud-sync): add Nuvio and MDBList providers#72

Open
moodiness wants to merge 12 commits into
ellite:mainfrom
moodiness:feat/cloud-sync-providers
Open

feat(cloud-sync): add Nuvio and MDBList providers#72
moodiness wants to merge 12 commits into
ellite:mainfrom
moodiness:feat/cloud-sync-providers

Conversation

@moodiness

@moodiness moodiness commented Jul 17, 2026

Copy link
Copy Markdown

Summary

Supersedes #68, which GitHub closed automatically when its source branch was renamed from feat/nuvio-provider to feat/cloud-sync-providers.

Adds Nuvio Cloud and MDBList as first-class Scrob synchronization providers, and includes the Trakt watched-history pagination fix reviewed in #68.

Nuvio Cloud

  • authenticate with Nuvio email/password without persisting the password
  • persist and rotate the Nuvio refresh token
  • load named Nuvio profiles and synchronize each profile independently
  • pull library items, watched history, and Continue Watching progress
  • push watched/unwatched state and playback progress back to Nuvio
  • normalize inbound IMDb identifiers through TMDB
  • resolve outbound TMDB identifiers to Nuvio-compatible bare IMDb IDs
  • support manual Sync now, explicit Push, and scheduled Auto Pull
  • support 15m, 30m, 1h, 3h, 6h, 12h, 24h, and 48h Nuvio pull intervals
  • include directly collected cloud series in My Shows

MDBList

  • authenticate with the per-user API key from MDBList Preferences
  • validate the key through the connection-status endpoint before storage
  • pull watched history, ratings, and watchlist items on demand
  • push full watched, ratings, and managed-watchlist snapshots on demand
  • push individual watched, rating, and managed-watchlist edits as they happen
  • persist the currently selected MDBList options automatically before Pull or Push, without requiring a separate Save Changes action
  • fan inbound MDBList watched/rating changes out to other enabled providers without echoing them back to MDBList
  • follow cursor pagination with the documented 1,000-item maximum and support legacy offset pagination
  • batch outbound payloads without constructing a second full payload copy
  • resolve show IMDb/TVDB identifiers to TMDB once per pull and cache the result for the job
  • preserve watch and rating timestamps
  • expose MDBList jobs through the existing sync-status UI
  • keep MDBList pull manual; no automatic MDBList scheduler or interval setting

Additional fixes

  • request Trakt's documented maximum page size and follow X-Pagination-Page-Count
  • request extended=progress on every watched-show page so episode data is retained
  • make Trakt and Simkl Disconnect buttons use the same destructive red treatment as connection deletion
  • clarify that Scrob expects a TMDB Read Access Token

Database

Adds one Alembic revision with:

  • seven MDBList user settings: API key plus three pull and three push flags
  • lists.mdblist_slug for the managed MDBList watchlist
  • the mdblist collection-source enum value

No MDBList automatic-pull column is created.

Verification

  • python -m compileall -q .
  • python -m unittest tests.test_trakt tests.test_nuvio tests.test_mdblist -v — 19 tests passed
  • npm run build — passed
  • Docker image rebuilt and /health returned 200
  • clean database upgraded from the initial migration through the new Alembic head; seven MDBList settings present and no automatic-pull column
  • live MDBList pull completed successfully through the local Scrob UI
  • live reversible MDBList smoke test added, read back, and removed a watched item, rating, and watchlist item; cleanup confirmed all three absent
  • live MDBList season response confirmed episode expansion and nested show identifiers
  • reproduced the unsaved-option Push failure (400), then verified automatic preference persistence (PATCH 200) followed by successful Push and Pull job creation (POST 200)
  • browser check confirmed the MDBList Pull control remains available, Automatic pull is absent, and Disconnect uses the red destructive hover style

Nuvio API documentation: https://nuvio.tv/docs

MDBList API documentation: https://api.mdblist.com/docs/

Closes #71
Fixes #61

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 Request] MDBList Sync Support Only one watch event is imported from Trakt

1 participant