fix: optimize media status update to avoid lifecycle hook triggers (#1218)

This change optimises the media updates to avoid unneccessary lifecycle hook executions which
results in potential recursion for POSTGRESQL compatibility. This should prevent an issue where
after a TV request, the tv request would get sent to sonarr and notification for it would get sent
over and over and over again
This commit is contained in:
Fallenbagel
2025-01-03 19:14:39 +08:00
committed by GitHub
parent 81d7473c05
commit 656cd91c9c

View File

@@ -722,8 +722,12 @@ export class MediaRequest {
MediaStatus.PARTIALLY_AVAILABLE && MediaStatus.PARTIALLY_AVAILABLE &&
media[this.is4k ? 'status4k' : 'status'] !== MediaStatus.PROCESSING media[this.is4k ? 'status4k' : 'status'] !== MediaStatus.PROCESSING
) { ) {
media[this.is4k ? 'status4k' : 'status'] = MediaStatus.PROCESSING; const statusField = this.is4k ? 'status4k' : 'status';
mediaRepository.save(media);
await mediaRepository.update(
{ id: this.media.id },
{ [statusField]: MediaStatus.PROCESSING }
);
} }
if ( if (
@@ -1271,19 +1275,23 @@ export class MediaRequest {
throw new Error('Media data not found'); throw new Error('Media data not found');
} }
media[this.is4k ? 'externalServiceId4k' : 'externalServiceId'] = const updateFields = {
sonarrSeries.id; [this.is4k ? 'externalServiceId4k' : 'externalServiceId']:
media[this.is4k ? 'externalServiceSlug4k' : 'externalServiceSlug'] = sonarrSeries.id,
sonarrSeries.titleSlug; [this.is4k ? 'externalServiceSlug4k' : 'externalServiceSlug']:
media[this.is4k ? 'serviceId4k' : 'serviceId'] = sonarrSettings?.id; sonarrSeries.titleSlug,
[this.is4k ? 'serviceId4k' : 'serviceId']: sonarrSettings?.id,
};
await mediaRepository.save(media); await mediaRepository.update({ id: this.media.id }, updateFields);
}) })
.catch(async () => { .catch(async () => {
const requestRepository = getRepository(MediaRequest); const requestRepository = getRepository(MediaRequest);
this.status = MediaRequestStatus.FAILED; await requestRepository.update(
await requestRepository.save(this); { id: this.id },
{ status: MediaRequestStatus.FAILED }
);
logger.warn( logger.warn(
'Something went wrong sending series request to Sonarr, marking status as FAILED', 'Something went wrong sending series request to Sonarr, marking status as FAILED',