Skip to content

Commit

Permalink
fix: optimize media status update to avoid lifecycle hook triggers (#…
Browse files Browse the repository at this point in the history
…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
  • Loading branch information
fallenbagel authored Jan 3, 2025
1 parent 81d7473 commit 656cd91
Showing 1 changed file with 18 additions and 10 deletions.
28 changes: 18 additions & 10 deletions server/entity/MediaRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -722,8 +722,12 @@ export class MediaRequest {
MediaStatus.PARTIALLY_AVAILABLE &&
media[this.is4k ? 'status4k' : 'status'] !== MediaStatus.PROCESSING
) {
media[this.is4k ? 'status4k' : 'status'] = MediaStatus.PROCESSING;
mediaRepository.save(media);
const statusField = this.is4k ? 'status4k' : 'status';

await mediaRepository.update(
{ id: this.media.id },
{ [statusField]: MediaStatus.PROCESSING }
);
}

if (
Expand Down Expand Up @@ -1271,19 +1275,23 @@ export class MediaRequest {
throw new Error('Media data not found');
}

media[this.is4k ? 'externalServiceId4k' : 'externalServiceId'] =
sonarrSeries.id;
media[this.is4k ? 'externalServiceSlug4k' : 'externalServiceSlug'] =
sonarrSeries.titleSlug;
media[this.is4k ? 'serviceId4k' : 'serviceId'] = sonarrSettings?.id;
const updateFields = {
[this.is4k ? 'externalServiceId4k' : 'externalServiceId']:
sonarrSeries.id,
[this.is4k ? 'externalServiceSlug4k' : 'externalServiceSlug']:
sonarrSeries.titleSlug,
[this.is4k ? 'serviceId4k' : 'serviceId']: sonarrSettings?.id,
};

await mediaRepository.save(media);
await mediaRepository.update({ id: this.media.id }, updateFields);
})
.catch(async () => {
const requestRepository = getRepository(MediaRequest);

this.status = MediaRequestStatus.FAILED;
await requestRepository.save(this);
await requestRepository.update(
{ id: this.id },
{ status: MediaRequestStatus.FAILED }
);

logger.warn(
'Something went wrong sending series request to Sonarr, marking status as FAILED',
Expand Down

0 comments on commit 656cd91

Please sign in to comment.