Skip to content

Commit e22817f

Browse files
fallenbagelDaliso
authored andcommitted
fix(media): clean up watchlist on error card delete (seerr-team#3073)
(cherry picked from commit ee915b9)
1 parent 92b97c3 commit e22817f

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
@@ -18,7 +18,7 @@ import logger from '@server/logger';
1818
import { isAuthenticated } from '@server/middleware/auth';
1919
import { Router } from 'express';
2020
import type { FindOneOptions } from 'typeorm';
21-
import { In, IsNull, Not } from 'typeorm';
21+
import { EntityNotFoundError, In, IsNull, Not } from 'typeorm';
2222

2323
const mediaRoutes = Router();
2424

@@ -191,11 +191,15 @@ mediaRoutes.delete(
191191

192192
return res.status(204).send();
193193
} catch (e) {
194-
logger.error('Something went wrong fetching media in delete request', {
194+
if (e instanceof EntityNotFoundError) {
195+
return res.status(204).send();
196+
}
197+
logger.error('Something went wrong deleting media', {
195198
label: 'Media',
199+
mediaId: req.params.id,
196200
message: e.message,
197201
});
198-
next({ status: 404, message: 'Media not found' });
202+
next({ status: 500, message: 'Failed to delete media' });
199203
}
200204
}
201205
);

src/components/TitleCard/ErrorCard.tsx

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Button from '@app/components/Common/Button';
22
import Icon from '@app/components/Common/Icon';
3+
import useToasts from '@app/hooks/useToasts';
34
import globalMessages from '@app/i18n/globalMessages';
45
import defineMessages from '@app/utils/defineMessages';
56
import axios from 'axios';
@@ -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)