mirror of
https://github.com/sct/overseerr.git
synced 2025-09-27 12:39:46 +02:00

* fix: modified media status handling when media has been deleted fix: requests will now be updated to completed on scan fix: modified components to display deleted as a status fix: corrected media status switching away from deleted fix: modified components to display deleted as a status fix: corrected media status switching away from deleted fix: base scanner will set requests to completed correctly fix: mark available button correctly sets requests as completed fix: status will now stay deleted after declined request refactor: request completion handling moved to entity fix: prevented notifications from sending to old deleted requests refactor: cleaned up code and added more detail to logs refactor: updated to reflect latest availability sync changes * fix: fetch requests only if necessary in db and remove unneeded code * fix: update request button logic to accomodate specials fix: remove completed filtering in tv details * fix: correctly set seasons status when using the manual button * refactor: improve reliability of season request completion refactor: remove seasonrequest code * fix: send notification for 4k movies fix: same for shows * feat: add completed filter to requests list refactor: correct label
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { MediaRequestStatus, MediaStatus } from '@server/constants/media';
|
|
import { getRepository } from '@server/datasource';
|
|
import Media from '@server/entity/Media';
|
|
import { MediaRequest } from '@server/entity/MediaRequest';
|
|
import type { EntitySubscriberInterface, UpdateEvent } from 'typeorm';
|
|
import { EventSubscriber } from 'typeorm';
|
|
|
|
@EventSubscriber()
|
|
export class MediaSubscriber implements EntitySubscriberInterface<Media> {
|
|
private async updateChildRequestStatus(event: Media, is4k: boolean) {
|
|
const requestRepository = getRepository(MediaRequest);
|
|
|
|
const requests = await requestRepository.find({
|
|
where: { media: { id: event.id } },
|
|
});
|
|
|
|
for (const request of requests) {
|
|
if (
|
|
request.is4k === is4k &&
|
|
request.status === MediaRequestStatus.PENDING
|
|
) {
|
|
request.status = MediaRequestStatus.APPROVED;
|
|
await requestRepository.save(request);
|
|
}
|
|
}
|
|
}
|
|
|
|
public beforeUpdate(event: UpdateEvent<Media>): void {
|
|
if (!event.entity) {
|
|
return;
|
|
}
|
|
|
|
if (
|
|
event.entity.status === MediaStatus.AVAILABLE &&
|
|
event.databaseEntity.status === MediaStatus.PENDING
|
|
) {
|
|
this.updateChildRequestStatus(event.entity as Media, false);
|
|
}
|
|
|
|
if (
|
|
event.entity.status4k === MediaStatus.AVAILABLE &&
|
|
event.databaseEntity.status4k === MediaStatus.PENDING
|
|
) {
|
|
this.updateChildRequestStatus(event.entity as Media, true);
|
|
}
|
|
}
|
|
|
|
public listenTo(): typeof Media {
|
|
return Media;
|
|
}
|
|
}
|