Skip to content

Staging - #1503

Merged
hidden4003 merged 27 commits into
masterfrom
staging
Oct 10, 2026
Merged

Staging#1503
hidden4003 merged 27 commits into
masterfrom
staging

Conversation

@hidden4003

Copy link
Copy Markdown
Member

Merge staging into master

Generic metadata source support: linking, display and settings now work for any source the server exposes, not just TMDB. This replaces the TMDB-only paths. 25 commits, 68 files, +3443/−1844.

Revamp by @revam

Features

  • Linking: link series and map their episodes for any metadata source (4d70556), with the source picked on the linking page (29d1b0a).
  • Series page: list links to every metadata source (0d4ef2d).
  • Source display: show each source's icon from the server (49165df), and link entries to their page on the source's own site (2856772).
  • Settings: manage every metadata source and its providers in a new Metadata settings tab, which replaces TmdbSettings (27bd799).
  • Settings: choose which sources are used for titles and descriptions (ecc5569).

Refactors

  • Export and import links for any source (527d1e3).
  • Keep the per-source image and matching settings under Metadata (9068cfa).

Fixes

Follow-up fixes by @hidden4003

Fixes

  • Validate the linking page source against the server's sources (3aadebc).
  • Don't treat unknown links as unlinked on the linking page (68c4cd8).
  • Reset cross-references when a source link is removed (4cdfe1d).
  • Show links to unlisted sources read-only (6ec5a3a).
  • Wait for the metadata sources to load before listing other sources (67e6b31).
  • Show the add link button as loading until the sources load (967d258).
  • Disable unconfigured and paused sources in the source picker (0d4517b).

Refactors / chores

  • Remove the legacy tmdb-linking route (c7c2239).
  • Keep the episode search placeholder wording (f826584).
  • Require server 6.0.0-dev.495 for the generic metadata routes (95d3745).
  • Require server 6.0.0-dev.503 for source suspensions (c51e18a).

⚠️ Server compatibility

The minimum server version (VITE_MIN_SERVER_VERSION) is raised to 6.0.0-dev.503, so this WebUI build will not work against older servers.

Testing

  • pnpm lint and pnpm test pass.
  • Manually checked: linking and unlinking a series, episode mapping, the settings tab, and the source picker with unconfigured and suspended sources.

revam and others added 27 commits October 10, 2026 09:17
* fix(tmdb): match the TMDB linking to the server

- The auto search preview lists a candidate once per origin; each entry is now listed once, with a badge for every origin that found it
- Episode links rated `DateAndNumberMatches` or `DateOffsetMatches` showed a blank badge and were left out of the counts
- The episode mapping body sent `ResetAll`, which the server never read; it is `UnsetAll` now
- A suggestion the automatic search would not link shows the server's `Rejection` as a badge, with its details in a tooltip; it can still be picked. The badge is a warning, except for an existing link or an unneeded hint, which only give context

* fix(tmdb): drop rejection badge/tooltip from TMDB link select panel

Keeps the per-origin dedup/grouping and badges from #1485, but removes
the Rejection reason mapping, tooltip, and badge — flagged as too much
inline data-translation logic for a presentational row component.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* docs(agents): add inline component complexity guideline

Codifies when a presentational child component defined alongside its
parent should be split into its own file, prompted by review feedback
on the TMDB rejection-badge removal in this PR.

---------

Co-authored-by: hidden4003 <hidden4003@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…ource

- Moved search, the auto-search preview, series and movie linking and unlinking, and the cross-reference listing onto the `Metadata/` and `Series/{id}/Metadata/{source}` routes
- Added a source picker fed by `GET Metadata/Source`; the page is at `metadata-linking?source=`, with `tmdb-linking` kept and TMDB as the default
- Moved the ordering choice onto `Metadata/{source}/Series/{id}/Orderings` and its `SetPreferred`, for every source
- Moved the episode mapping onto `Series/{id}/Metadata/{source}/CrossReferences/Episode` (and `…/Auto`), `Metadata/{source}/Series/{id}/Episode` and `Metadata/{source}/Episode/Bulk`, with string IDs, shown for every linked series that has episodes
- Searched episodes by season, special or title (`S1E5`, `Special 3`) in the episode picker
- Moved the linking components, which serve every source now, from `Collection/Tmdb/` to `Collection/MetadataLinking/`
- Removed the TMDB episode hooks and types it replaced
feat(metadata): link series and map their episodes for any metadata source
- Listed the series' links to every source after AniDB and TMDB, from `IDs.Linked`, with `Series/{id}/Metadata/{source}/CrossReferences` telling series from movies
- Added a row to link each source `GET Metadata/Source` reports enabled
- Opened other sources' entries on the linking page, as the server sends no site URL for them; TMDB keeps its external link
- Renamed `SeriesMetadata` to `SeriesMetadataLink`, which takes a `source` and its `sourceName`
The cross-references query is disabled once a source has no linked IDs, and invalidating skips disabled queries, so the removed row kept rendering from the cache.
The linking page falls back to TMDB for a source the server does not list, so a link to such a source opened the wrong page. Show those links without the linking page link or the actions.
Before the sources load, a linked source cannot be told from an unlisted one, so every one showed read-only and then switched.
feat(series): list links to every metadata source
- Linked search, suggestion and cross-reference rows and the linking page header through the server's `SiteUrl`, for every source
- Listed TMDB's links on the series page from `…/CrossReferences` like the other sources, falling back to the linking page without a `SiteUrl`
- Removed the TMDB URL builders and `getSiteLink`
- Added `MetadataSourceIcon`, loading `Metadata/Source/{source}/Icon` when the source `HasIcon`, else the database icon
- Used it on the series page's links and the linking page's source label
- Dropped the bundled TMDB image; AniDB's stays for AniDB IDs shown elsewhere
- Replaced the series page's add row per source with one "Add link" button, which opens the linking page without a source
- Listed the linkable sources there with their icon and a hint, going straight to the only one when there is one, and replacing the history entry on a pick
- Removed the source dropdown from the search panel; edit links keep naming their source

- Removed the `tmdb-linking` route
…llow-ups

refactor(metadata): add source site links and icons, pick the source on the linking page
- Renamed the TMDB tab to Metadata, listing each source from `GET Metadata/Provider` with its icon and status from `GET Metadata/Source`, and its icon from the providers' `HasIcon` when the source list has none
- Set every kind through `PUT Metadata/Source/{source}/Providers`: a switch where one provider answers, an order where several do, the answering provider marked Active and the other enabled ones Standby; `PUT Metadata/Provider/{providerID}` stays for auto-linking
- Moved the auto-linker and the auto-link switches onto the provider route for every source, and added TMDB's network download switch
- Kept the switches, orders and auto-link choices as a draft, counted as unsaved changes, sent on Save after the settings `PATCH` and dropped by Cancel; a part that fails stays in the draft with the server's error
- Rendered a provider's own `Configuration` inline in its source's section with `DynamicForm`, saved with its own button through `PUT Configuration/{id}`
- Replaced TMDB's image switches, counts and language order with `Image.MetadataSourceDefaults`, adding banners, and let each source with an image provider keep its own in `Image.MetadataSources`; a picked image language stays unsaved until Save
- Replaced the first run's TMDB tab with a Metadata tab showing the page's search option, image options and sources, its provider changes sent with the step's settings
- Added the `Metadata` purge days
- Stopped reading the core `TMDB` settings: removed `TMDBDownloadSettings` and the `TMDB` block from the settings types and defaults
- Picked the source on the metadata page and moved the export and import onto `Metadata/{source}/CrossReferences/Export` and `…/Import`
- Filtered the export by the source's own series, episode and movie IDs as text
- Listed what an import added, updated, kept and replaced in its toast
- Removed the `Tmdb/Export` and `Tmdb/Import` calls
- Added `getDistinctPluginName`, matching the one on `feat/calendar`
- Showed the plugin name in parentheses after the provider name in the provider rows and configuration headers, and left it out when it repeats the provider's name
- Added "Series Title Source", "Episode Title Source" and "Description Source" after the renamed language orders on the collection page, editing `Language.*SourceOrder` in the settings draft
- Offered AniDB and every source from `GET Metadata/Source` in an add picker, each with its icon and name, and kept source names no route lists, `user` among them
- Moved the drag-and-drop list behind `LanguageOrderList` into `OrderList`, shared by both
…nder `Metadata`

- Read and wrote the image defaults and each source's own image options at `Metadata.SourceDefaults.Images` and `Metadata.Sources`, where the server moved them
- Added the episode matching window to the source defaults and as a per-source option next to the images
- Dropped a source's entry once it follows the defaults for both
- Dropped `SupportsPausing` and typed `Suspensions` on the source status
- Worded each suspension from its kind when it gives no reason
refactor(settings): replace the TMDB tab with settings for every metadata source
@hidden4003
hidden4003 merged commit 77b58bd into master Oct 10, 2026
3 checks 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.

2 participants