fix(requests): mark requests as completed when media is already available (#2462)

Co-authored-by: fallenbagel <98979876+Fallenbagel@users.noreply.github.com>
This commit is contained in:
Gauthier
2026-03-14 13:45:41 +01:00
committed by GitHub
parent f40323c7c5
commit d25d0ca570
2 changed files with 44 additions and 21 deletions

View File

@@ -348,17 +348,15 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface<MediaRe
if (
media[entity.is4k ? 'status4k' : 'status'] === MediaStatus.AVAILABLE
) {
logger.warn('Media already exists, marking request as APPROVED', {
logger.warn('Media already exists, marking request as COMPLETED', {
label: 'Media Request',
requestId: entity.id,
mediaId: entity.media.id,
});
if (entity.status !== MediaRequestStatus.APPROVED) {
const requestRepository = getRepository(MediaRequest);
entity.status = MediaRequestStatus.APPROVED;
await requestRepository.save(entity);
}
const requestRepository = getRepository(MediaRequest);
entity.status = MediaRequestStatus.COMPLETED;
await requestRepository.save(entity);
return;
}
@@ -545,17 +543,18 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface<MediaRe
if (
media[entity.is4k ? 'status4k' : 'status'] === MediaStatus.AVAILABLE
) {
logger.warn('Media already exists, marking request as APPROVED', {
logger.warn('Media already exists, marking request as COMPLETED', {
label: 'Media Request',
requestId: entity.id,
mediaId: entity.media.id,
});
if (entity.status !== MediaRequestStatus.APPROVED) {
const requestRepository = getRepository(MediaRequest);
entity.status = MediaRequestStatus.APPROVED;
await requestRepository.save(entity);
}
const requestRepository = getRepository(MediaRequest);
entity.status = MediaRequestStatus.COMPLETED;
entity.seasons.forEach((season) => {
season.status = MediaRequestStatus.COMPLETED;
});
await requestRepository.save(entity);
return;
}
@@ -986,6 +985,15 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface<MediaRe
try {
await this.sendToRadarr(event.entity as MediaRequest);
await this.sendToSonarr(event.entity as MediaRequest);
} catch (e) {
logger.error('Error while sending to *arr in afterUpdate subscriber', {
label: 'Media Request',
requestId: (event.entity as MediaRequest).id,
errorMessage: e instanceof Error ? e.message : String(e),
});
}
try {
await this.updateParentStatus(event.entity as MediaRequest);
if (event.entity.status === MediaRequestStatus.COMPLETED) {
@@ -997,11 +1005,14 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface<MediaRe
}
}
} catch (e) {
logger.error('Error in afterUpdate subscriber', {
label: 'Media Request',
requestId: (event.entity as MediaRequest).id,
errorMessage: e instanceof Error ? e.message : String(e),
});
logger.error(
'Error while updating parent status in afterUpdate subscriber',
{
label: 'Media Request',
requestId: (event.entity as MediaRequest).id,
errorMessage: e instanceof Error ? e.message : String(e),
}
);
}
}
@@ -1013,14 +1024,26 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface<MediaRe
try {
await this.sendToRadarr(event.entity as MediaRequest);
await this.sendToSonarr(event.entity as MediaRequest);
await this.updateParentStatus(event.entity as MediaRequest);
} catch (e) {
logger.error('Error in afterInsert subscriber', {
logger.error('Error while sending to *arr in afterInsert subscriber', {
label: 'Media Request',
requestId: (event.entity as MediaRequest).id,
errorMessage: e instanceof Error ? e.message : String(e),
});
}
try {
await this.updateParentStatus(event.entity as MediaRequest);
} catch (e) {
logger.error(
'Error while updating parent status in afterInsert subscriber',
{
label: 'Media Request',
requestId: (event.entity as MediaRequest).id,
errorMessage: e instanceof Error ? e.message : String(e),
}
);
}
}
public async afterRemove(event: RemoveEvent<MediaRequest>): Promise<void> {

View File

@@ -9,7 +9,7 @@ import { MediaRequest } from '@server/entity/MediaRequest';
import Season from '@server/entity/Season';
import SeasonRequest from '@server/entity/SeasonRequest';
import type { EntitySubscriberInterface, UpdateEvent } from 'typeorm';
import { EventSubscriber } from 'typeorm';
import { EventSubscriber, In } from 'typeorm';
@EventSubscriber()
export class MediaSubscriber implements EntitySubscriberInterface<Media> {
@@ -45,7 +45,7 @@ export class MediaSubscriber implements EntitySubscriberInterface<Media> {
},
where: {
media: { id: event.id },
status: MediaRequestStatus.APPROVED,
status: In([MediaRequestStatus.APPROVED, MediaRequestStatus.FAILED]),
is4k,
},
});