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}