From 75c3a755341589f2b4ca684624f08c72e90579c7 Mon Sep 17 00:00:00 2001
From: fallenbagel <98979876+Fallenbagel@users.noreply.github.com>
Date: Thu, 10 Sep 2026 07:19:05 +0800
Subject: [PATCH] feat(requests): show why a request failed
A failed request looked the same whatever went wrong, so the only offered action was a retry that
could not help in some situations. Surface the recorded reason on the request's status badge, offer
a search for a different listing when a show's seasons are numbered differently than TheTVDB, and
disable the retry for that case since it cannot succeed on replay.
---
src/components/RequestBlock/index.tsx | 15 ++-
src/components/RequestCard/index.tsx | 104 ++++++++++++++----
.../RequestList/RequestItem/index.tsx | 101 ++++++++++++-----
src/i18n/globalMessages.ts | 9 ++
src/i18n/locale/en.json | 7 ++
src/utils/requestFailureHelpers.ts | 42 +++++++
6 files changed, 227 insertions(+), 51 deletions(-)
create mode 100644 src/utils/requestFailureHelpers.ts
diff --git a/src/components/RequestBlock/index.tsx b/src/components/RequestBlock/index.tsx
index 5ea29c3d56..2355dcce50 100644
--- a/src/components/RequestBlock/index.tsx
+++ b/src/components/RequestBlock/index.tsx
@@ -7,6 +7,7 @@ import useRequestOverride from '@app/hooks/useRequestOverride';
import { useUser } from '@app/hooks/useUser';
import globalMessages from '@app/i18n/globalMessages';
import defineMessages from '@app/utils/defineMessages';
+import { formatFailureReason } from '@app/utils/requestFailureHelpers';
import {
CalendarIcon,
CheckIcon,
@@ -225,9 +226,17 @@ const RequestBlock = ({ request, onUpdate }: RequestBlockProps) => {
)}
{request.status === MediaRequestStatus.FAILED && (
-