fix: mark requests as completed when media is already available

When media is already available (e.g. manually added to Jellyfin), sendToRadarrand sendToSonarr
incorrectly kept the request status as APPROVED instead ofmarking it COMPLETED. This caused the
"available" filter to miss these requestssince it requires both COMPLETED status and AVAILABLE
media. Additionally, MediaSubscriber.updateRelatedMediaRequest only queried forAPPROVED requests
when transitioning to COMPLETED, so FAILED requests werenever picked up when media became available
via library scan.

fix #2409
This commit is contained in:
fallenbagel
2026-02-28 06:15:40 +08:00
parent d82a4a7814
commit d4a5a6fe4e
2 changed files with 11 additions and 12 deletions

View File

@@ -354,11 +354,9 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface<MediaRe
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;
}
@@ -532,11 +530,12 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface<MediaRe
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;
}

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,
},
});