diff --git a/gui/frontend/src/app.tsx b/gui/frontend/src/app.tsx index 563c028c..1f366268 100644 --- a/gui/frontend/src/app.tsx +++ b/gui/frontend/src/app.tsx @@ -1942,30 +1942,18 @@ export default function App() { return [...manual, ...auto]; }; + // The overrides in effect, not the ones edited since the last preview: a preview + // round-trip echoes them back into preview.ReleaseNameOverrides, so a diff against + // that snapshot empties itself as soon as the metadata is refreshed. const namingOverrides = useMemo(() => { - const stored = - preview.ReleaseNameOverrides && typeof preview.ReleaseNameOverrides === "object" - ? preview.ReleaseNameOverrides - : {}; const overrides = releaseOverrideState?.dirty ? releaseOverrideState.overrides : preview.ReleaseNameOverrides || {}; - return Object.entries(overrides || {}).filter(([key, value]) => { + return Object.entries(overrides || {}).filter(([, value]) => { if (value === null || value === undefined) return false; - const storedValue = (stored as Record)[key]; - if (typeof value === "string") { - const current = value.trim(); - const prev = typeof storedValue === "string" ? storedValue.trim() : ""; - return current !== prev; - } - if (typeof value === "number") { - const prev = typeof storedValue === "number" ? storedValue : 0; - return value !== prev; - } - if (typeof value === "boolean") { - const prev = typeof storedValue === "boolean" ? storedValue : false; - return value !== prev; - } + if (typeof value === "string") return value.trim() !== ""; + if (typeof value === "number") return value !== 0; + if (typeof value === "boolean") return value; return false; }); }, [preview.ReleaseNameOverrides, releaseOverrideState]); diff --git a/gui/frontend/src/pages/tracker_upload/index.test.tsx b/gui/frontend/src/pages/tracker_upload/index.test.tsx index 1be4b9e8..beb90ba0 100644 --- a/gui/frontend/src/pages/tracker_upload/index.test.tsx +++ b/gui/frontend/src/pages/tracker_upload/index.test.tsx @@ -126,6 +126,22 @@ describe("TrackerUploadPage", () => { expect(screen.queryByText(/Upload:/)).toBeNull(); }); + it("shows the prepared release name before a dry run runs", () => { + render(); + + expect(screen.getByText("Example Movie 2160p WEB-DL DD+ 5.1-GRP")).toBeTruthy(); + expect( + screen.getByText(/Prepared name — run a dry run to resolve the AITHER upload name\./), + ).toBeTruthy(); + }); + + it("lists the naming overrides in effect", () => { + render(); + + expect(screen.getByText("Naming overrides (1)")).toBeTruthy(); + expect(screen.getByText("-GRP")).toBeTruthy(); + }); + it("shows rule warnings without blocking tracker eligibility", () => { render( ) {

))} + {releaseNameChanged ? null : ( +
+

Release name

+

+ {uploadReleaseName || originalReleaseName || "No release name yet"} +

+ {!uploadReleaseName && originalReleaseName ? ( +

+ Prepared name — run a dry run to resolve the {tracker.name} upload name. +

+ ) : null} +
+ )} + {releaseNameChanged ? (
@@ -899,21 +913,15 @@ export default function TrackerUploadPage(props: Readonly) { {namingOverrides.length > 0 ? (
- Naming changes + Naming overrides ({namingOverrides.length})
-
-

Release name

-

{preview.ReleaseName || "No release name yet"}

-
-
- {namingOverrides.map(([key, value]) => ( -
-

{formatLabel(key)}

-

{String(value)}

-
- ))} -
+ {namingOverrides.map(([key, value]) => ( +
+

{formatLabel(key)}

+

{String(value)}

+
+ ))}
) : null}