feat: dynamic provider order, hoster routing, MKV sample fix

- Replace fixed primary/secondary/tertiary slots with unlimited ordered
  providerOrder: DebridProvider[] list; supports as many accounts as needed
- Provider list reorderable via up/down buttons in Accounts settings tab
- Migration: derives order from legacy primary/secondary/tertiary if empty
- Mega-Debrid split into megadebrid-api and megadebrid-web as separate providers
- Add per-hoster routing (hosterRouting) to assign specific debrid provider per hoster
- Fix duplicate MKV files in library: filter out sample files from Sample subfolders
- Remove legacy provider-selection dropdowns from hidden settings section
- Add CSS for provider-order-list/row/num/label/actions classes
- Update debrid tests: add providerOrder: [] to use legacy fallback path

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Sucukdeluxe
2026-03-06 22:17:44 +01:00
co-authored by Claude Opus 4.6
parent 0003d786d8
commit 716b516900
7 changed files with 166 additions and 96 deletions
+7
View File
@@ -17,6 +17,7 @@ describe("debrid service", () => {
megaLogin: "user",
megaPassword: "pass",
bestToken: "",
providerOrder: [] as const,
providerPrimary: "realdebrid" as const,
providerSecondary: "megadebrid" as const,
providerTertiary: "bestdebrid" as const,
@@ -182,6 +183,7 @@ describe("debrid service", () => {
const settings = {
...defaultSettings(),
allDebridToken: "ad-token",
providerOrder: [] as const,
providerPrimary: "alldebrid" as const,
providerSecondary: "none" as const,
providerTertiary: "none" as const,
@@ -212,6 +214,7 @@ describe("debrid service", () => {
token: "",
bestToken: "",
allDebridToken: "ad-token",
providerOrder: [] as const,
providerPrimary: "alldebrid" as const,
providerSecondary: "realdebrid" as const,
providerTertiary: "megadebrid" as const,
@@ -285,6 +288,7 @@ describe("debrid service", () => {
...defaultSettings(),
allDebridToken: "ad-token",
allDebridUseWebLogin: true,
providerOrder: [] as const,
providerPrimary: "alldebrid" as const,
providerSecondary: "none" as const,
providerTertiary: "none" as const,
@@ -420,6 +424,7 @@ describe("debrid service", () => {
allDebridToken: "",
megaLogin: "user",
megaPassword: "pass",
providerOrder: [] as const,
providerPrimary: "megadebrid" as const,
providerSecondary: "megadebrid" as const,
providerTertiary: "megadebrid" as const,
@@ -484,6 +489,7 @@ describe("debrid service", () => {
megaPassword: "pass",
megaDebridApiEnabled: true,
megaDebridWebEnabled: true,
providerOrder: [] as const,
providerPrimary: "megadebrid-api" as const,
providerSecondary: "megadebrid-web" as const,
providerTertiary: "none" as const,
@@ -514,6 +520,7 @@ describe("debrid service", () => {
allDebridToken: "",
megaLogin: "user",
megaPassword: "pass",
providerOrder: [] as const,
providerPrimary: "megadebrid" as const,
providerSecondary: "none" as const,
providerTertiary: "none" as const,