Skip to content

Commit ee915b9

Browse files
authored
fix(media): clean up watchlist on error card delete (#3073)
1 parent 4ed29cf commit ee915b9

2 files changed

Lines changed: 28 additions & 4 deletions

File tree

server/routes/media.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import logger from '@server/logger';
1717
import { isAuthenticated } from '@server/middleware/auth';
1818
import { Router } from 'express';
1919
import type { FindOneOptions } from 'typeorm';
20-
import { In, IsNull, Not } from 'typeorm';
20+
import { EntityNotFoundError, In, IsNull, Not } from 'typeorm';
2121

2222
const mediaRoutes = Router();
2323

@@ -187,11 +187,15 @@ mediaRoutes.delete(
187187

188188
return res.status(204).send();
189189
} catch (e) {
190-
logger.error('Something went wrong fetching media in delete request', {
190+
if (e instanceof EntityNotFoundError) {
191+
return res.status(204).send();
192+
}
193+
logger.error('Something went wrong deleting media', {
191194
label: 'Media',
195+
mediaId: req.params.id,
192196
message: e.message,
193197
});
194-
next({ status: 404, message: 'Media not found' });
198+
next({ status: 500, message: 'Failed to delete media' });
195199
}
196200
}
197201
);

src/components/TitleCard/ErrorCard.tsx

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Button from '@app/components/Common/Button';
2+
import useToasts from '@app/hooks/useToasts';
23
import globalMessages from '@app/i18n/globalMessages';
34
import defineMessages from '@app/utils/defineMessages';
45
import { CheckIcon, TrashIcon } from '@heroicons/react/24/solid';
@@ -23,9 +24,28 @@ const messages = defineMessages('components.TitleCard', {
2324

2425
const ErrorCard = ({ id, tmdbId, tvdbId, type, canExpand }: ErrorCardProps) => {
2526
const intl = useIntl();
27+
const { addToast } = useToasts();
2628

2729
const deleteMedia = async () => {
28-
await axios.delete(`/api/v1/media/${id}`);
30+
try {
31+
await axios.delete(`/api/v1/watchlist/${tmdbId}?mediaType=${type}`);
32+
} catch (e) {
33+
if (!axios.isAxiosError(e) || e.response?.status !== 404) {
34+
addToast(intl.formatMessage(globalMessages.error), {
35+
appearance: 'error',
36+
autoDismiss: true,
37+
});
38+
return;
39+
}
40+
}
41+
await axios.delete(`/api/v1/media/${id}`).catch((e) => {
42+
if (axios.isAxiosError(e) && e.response?.status === 404) return;
43+
addToast(intl.formatMessage(globalMessages.error), {
44+
appearance: 'error',
45+
autoDismiss: true,
46+
});
47+
});
48+
mutate('/api/v1/discover/watchlist');
2949
mutate('/api/v1/media?filter=allavailable&take=20&sort=mediaAdded');
3050
mutate('/api/v1/request?filter=all&take=10&sort=modified&skip=0');
3151
};

0 commit comments

Comments
 (0)