mirror of
https://github.com/sct/overseerr.git
synced 2025-09-17 17:24:35 +02:00
feat: issues (#2180)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { Notification } from '..';
|
||||
import Media from '../../../entity/Media';
|
||||
import type Issue from '../../../entity/Issue';
|
||||
import type Media from '../../../entity/Media';
|
||||
import { MediaRequest } from '../../../entity/MediaRequest';
|
||||
import { User } from '../../../entity/User';
|
||||
import { NotificationAgentConfig } from '../../settings';
|
||||
@@ -12,6 +13,7 @@ export interface NotificationPayload {
|
||||
message?: string;
|
||||
extra?: { name: string; value: string }[];
|
||||
request?: MediaRequest;
|
||||
issue?: Issue;
|
||||
}
|
||||
|
||||
export abstract class BaseAgent<T extends NotificationAgentConfig> {
|
||||
|
@@ -1,6 +1,8 @@
|
||||
import axios from 'axios';
|
||||
import { getRepository } from 'typeorm';
|
||||
import { hasNotificationType, Notification } from '..';
|
||||
import { IssueStatus, IssueTypeNames } from '../../../constants/issue';
|
||||
import { MediaType } from '../../../constants/media';
|
||||
import { User } from '../../../entity/User';
|
||||
import logger from '../../../logger';
|
||||
import { Permission } from '../../permissions';
|
||||
@@ -120,6 +122,48 @@ class DiscordAgent
|
||||
});
|
||||
}
|
||||
|
||||
// If payload has an issue attached, push issue specific fields
|
||||
if (payload.issue) {
|
||||
fields.push(
|
||||
{
|
||||
name: 'Created By',
|
||||
value: payload.issue.createdBy.displayName,
|
||||
inline: true,
|
||||
},
|
||||
{
|
||||
name: 'Issue Type',
|
||||
value: IssueTypeNames[payload.issue.issueType],
|
||||
inline: true,
|
||||
},
|
||||
{
|
||||
name: 'Issue Status',
|
||||
value:
|
||||
payload.issue.status === IssueStatus.OPEN ? 'Open' : 'Resolved',
|
||||
inline: true,
|
||||
}
|
||||
);
|
||||
|
||||
if (payload.issue.media.mediaType === MediaType.TV) {
|
||||
fields.push({
|
||||
name: 'Affected Season',
|
||||
value:
|
||||
payload.issue.problemSeason > 0
|
||||
? `Season ${payload.issue.problemSeason}`
|
||||
: 'All Seasons',
|
||||
});
|
||||
|
||||
if (payload.issue.problemSeason > 0) {
|
||||
fields.push({
|
||||
name: 'Affected Episode',
|
||||
value:
|
||||
payload.issue.problemEpisode > 0
|
||||
? `Episode ${payload.issue.problemEpisode}`
|
||||
: 'All Episodes',
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case Notification.MEDIA_PENDING:
|
||||
color = EmbedColors.ORANGE;
|
||||
@@ -161,6 +205,16 @@ class DiscordAgent
|
||||
value: 'Failed',
|
||||
inline: true,
|
||||
});
|
||||
break;
|
||||
case Notification.ISSUE_CREATED:
|
||||
case Notification.ISSUE_COMMENT:
|
||||
case Notification.ISSUE_RESOLVED:
|
||||
color = EmbedColors.ORANGE;
|
||||
|
||||
if (payload.issue && payload.issue.status === IssueStatus.RESOLVED) {
|
||||
color = EmbedColors.GREEN;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@@ -43,11 +43,6 @@ class WebPushAgent
|
||||
payload: NotificationPayload
|
||||
): PushNotificationPayload {
|
||||
switch (type) {
|
||||
case Notification.NONE:
|
||||
return {
|
||||
notificationType: Notification[type],
|
||||
subject: 'Unknown',
|
||||
};
|
||||
case Notification.TEST_NOTIFICATION:
|
||||
return {
|
||||
notificationType: Notification[type],
|
||||
@@ -132,6 +127,11 @@ class WebPushAgent
|
||||
requestId: payload.request?.id,
|
||||
actionUrl: `/${payload.media?.mediaType}/${payload.media?.tmdbId}`,
|
||||
};
|
||||
default:
|
||||
return {
|
||||
notificationType: Notification[type],
|
||||
subject: 'Unknown',
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -10,6 +10,9 @@ export enum Notification {
|
||||
TEST_NOTIFICATION = 32,
|
||||
MEDIA_DECLINED = 64,
|
||||
MEDIA_AUTO_APPROVED = 128,
|
||||
ISSUE_CREATED = 256,
|
||||
ISSUE_COMMENT = 512,
|
||||
ISSUE_RESOLVED = 1024,
|
||||
}
|
||||
|
||||
export const hasNotificationType = (
|
||||
|
Reference in New Issue
Block a user