Skip to content

refactor(settings): replace the TMDB tab with settings for every metadata source - #1489

Merged
hidden4003 merged 7 commits into
stagingfrom
split/12-metadata-settings
Oct 10, 2026
Merged

hidden4003 merged 7 commits into
stagingfrom
split/12-metadata-settings

Conversation

@revam

@revam revam commented Oct 3, 2026 •

Copy link
Copy Markdown
Member

Why

The server manages every metadata source and its providers through /api/v3/Metadata/Provider and /api/v3/Metadata/Source/{source}/Providers, and moved TMDB's settings out of the core settings. The TMDB tab read core settings that are gone.

What changed

  • Settings: the TMDB tab becomes Metadata (/settings/metadata), each source with its icon and status, a switch per kind or a provider order (active and standby), auto-linking, and each provider's own Configuration inline (PUT /api/v3/Configuration/{id}). The kinds and their orders always come from GET …/Source/{source}/Providers, which 6.0.0-dev.495 has.
  • The provider changes are a draft saved with the settings on Save and dropped by Cancel; a failing part stays with the server's error.
  • Images: Image.MetadataSourceDefaults with per-source overrides replace TMDB's image settings; Metadata purge days added.
  • Link export and import for any source through /api/v3/Metadata/{source}/CrossReferences/Export and …/Import, replacing Tmdb/Export and Tmdb/Import.
  • First run: the TMDB tab becomes a Metadata tab with the page's search option, image options and sources, through the components the page uses (MetadataSearchSettings, MetadataSourceList); its provider changes are a draft sent with the step's settings.
  • The core TMDB settings types and components are removed.

Where to look first

  • src/core/react-query/metadata/draft.ts: how provider changes wait for Save and what is sent.
  • src/pages/settings/tabs/MetadataSettings.tsx: the page, and src/components/Settings/MetadataSitesSettings/MetadataSourceList.tsx, its sources, shared with the first run.
  • src/pages/settings/SettingsPage.tsx: saving the settings and the draft together.

Feedback wanted

Whether saving provider changes with the settings' Save button is the right model, and the provider order UX.

Stack

Part 12 of 12 in the split of #1477. Below: Part 11, site links, source icons and the source picker. Above: nothing; this is the top. Its tree is #1477's plus the review fixes.

Testing

pnpm tscheck, pnpm lint, pnpm test and pnpm build pass at this branch's tip. Manual, on 6.0.0-dev.495: reorder providers and toggle auto-linking, save and cancel; export TMDB links and import them back; run the first-run Metadata tab.

Title and description sources

Settings > Collection now chooses which sources titles and descriptions come from, and in what order. These are the server's Language.SeriesTitleSourceOrder, EpisodeTitleSourceOrder and DescriptionSourceOrder. Until now the WebUI had no way to edit them. With a description order of [TMDB, AniDB], for example, an overview that only TVDB has is never shown.

  • The language orders are renamed Series Title Language, Episode Title Language and Description Language. Each one is now followed by a … Source list built like them: drag to reorder, - to remove and + to add.
  • The + picker lists AniDB and every source from GET Metadata/Source (TMDb and the plugin sources, such as TvDB and AniList). Each source has its icon (Metadata/Source/{source}/Icon, with a generic icon when there is none) and its name, plus the plugin's name in parentheses when it differs.
  • A source name in the settings that no route lists, such as one from a plugin that isn't loaded, stays in the list under its own name and is saved back unchanged.
  • User texts aren't offered, because they are implicit: the server always uses them after the listed sources, and a user's pick wins whatever the order. A line under the lists says so. A user entry already in a saved order is kept as a plain entry that can be removed.
  • Changes go into the settings draft and are sent by the page's Save, as a JSON patch on Language.*SourceOrder.
  • The list part of LanguageOrderList is now a shared OrderList, so the language lists look and behave the same as before.

Testing

  1. Open Settings > Collection. Each language order should be followed by its source order, showing the current values with their icons.
  2. Click + on Description Source, tick TvDB (or any plugin source) and click Save in the picker. The source is added to the end of the list, and the unsaved-changes toast appears.
  3. Drag it above TMDb, then remove one source with -. Cancel should restore the saved order.
  4. Save the page and reload. The order should persist in settings-server.json under Language. The orders take effect after a server restart, because they are [RequiresRestart] on the server.

Screenshots

Settings overview: Metadata

metadata-overview

Settings overview: Collection

collection-overview

Language Options: title and description sources

language-options

Source picker

source-picker

Metadata: General Options

metadata-general-options

Metadata: Image Options

metadata-image-defaults

Metadata: TMDb source

metadata-source-tmdb

Metadata: TvDB source

metadata-source-tvdb

Metadata: AniList source

metadata-source-anilist

Metadata: TMDb providers

metadata-providers-tmdb

Metadata: TvDB providers

metadata-providers-tvdb

Metadata: AniList providers

metadata-providers-anilist

Metadata: Cross-References

metadata-cross-references

Dialog: Image Languages

dialog-image-languages

Dialog: Export cross-references

dialog-cross-reference-export

Dialog: Import cross-references

dialog-cross-reference-import

@revam
revam added this pull request to stack #1490 October 3, 2026 17:38
@revam revam changed the title split/12 metadata settings refactor(settings): replace the TMDB tab with settings for every metadata source Oct 3, 2026
@harshithmohan
harshithmohan force-pushed the split/12-metadata-settings branch from b8e8b73 to add5537 Compare October 3, 2026 17:43
@revam
revam force-pushed the split/12-metadata-settings branch from add5537 to 733cd68 Compare October 3, 2026 18:48
@revam
revam force-pushed the split/12-metadata-settings branch from 733cd68 to 05ba5a3 Compare October 3, 2026 19:04
@harshithmohan
harshithmohan force-pushed the split/12-metadata-settings branch 3 times, most recently from 7ea2cc0 to 30e977c Compare October 4, 2026 08:00
@harshithmohan
harshithmohan force-pushed the split/12-metadata-settings branch from 82a171f to 40003cb Compare October 5, 2026 17:39
@harshithmohan
harshithmohan removed this pull request from stack #1490 October 5, 2026 17:42
@harshithmohan
harshithmohan added this pull request to stack #1492 October 5, 2026 17:42
@harshithmohan
harshithmohan force-pushed the split/12-metadata-settings branch from 40003cb to c4799ce Compare October 6, 2026 13:51
@harshithmohan
harshithmohan removed this pull request from stack #1492 October 6, 2026 13:53
@harshithmohan
harshithmohan added this pull request to stack #1494 October 6, 2026 13:53
@harshithmohan harshithmohan reopened this Oct 6, 2026
@harshithmohan harshithmohan reopened this Oct 6, 2026
@harshithmohan
harshithmohan removed this pull request from stack #1494 October 6, 2026 13:54
@harshithmohan
harshithmohan changed the base branch from split/11-metadata-linking-follow-ups to master October 6, 2026 13:55
@harshithmohan
harshithmohan changed the base branch from master to split/11-metadata-linking-follow-ups October 6, 2026 13:55
@harshithmohan
harshithmohan added this pull request to stack #1495 October 6, 2026 13:55
@harshithmohan
harshithmohan removed this pull request from stack #1495 October 6, 2026 16:37
@harshithmohan
harshithmohan added this pull request to stack #1496 October 6, 2026 16:37
revam and others added 7 commits October 10, 2026 19:39
- 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
@hidden4003
hidden4003 force-pushed the split/12-metadata-settings branch from 582b594 to c51e18a Compare October 10, 2026 17:01
@hidden4003
hidden4003 merged commit 9a43636 into staging Oct 10, 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