diff --git a/server/entity/MediaRequest.ts b/server/entity/MediaRequest.ts
index 167d1db0..be28e35d 100644
--- a/server/entity/MediaRequest.ts
+++ b/server/entity/MediaRequest.ts
@@ -142,7 +142,9 @@ export class MediaRequest {
if (this.type === MediaType.MOVIE) {
const movie = await tmdb.getMovie({ movieId: media.tmdbId });
notificationManager.sendNotification(Notification.MEDIA_PENDING, {
- subject: movie.title,
+ subject: `${movie.title}${
+ movie.release_date ? ` (${movie.release_date.slice(0, 4)})` : ''
+ }`,
message: movie.overview,
image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${movie.poster_path}`,
media,
@@ -153,7 +155,9 @@ export class MediaRequest {
if (this.type === MediaType.TV) {
const tv = await tmdb.getTvShow({ tvId: media.tmdbId });
notificationManager.sendNotification(Notification.MEDIA_PENDING, {
- subject: tv.name,
+ subject: `${tv.name}${
+ tv.first_air_date ? ` (${tv.first_air_date.slice(0, 4)})` : ''
+ }`,
message: tv.overview,
image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${tv.poster_path}`,
media,
@@ -210,7 +214,9 @@ export class MediaRequest {
: Notification.MEDIA_APPROVED
: Notification.MEDIA_DECLINED,
{
- subject: movie.title,
+ subject: `${movie.title}${
+ movie.release_date ? ` (${movie.release_date.slice(0, 4)})` : ''
+ }`,
message: movie.overview,
image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${movie.poster_path}`,
notifyUser: autoApproved ? undefined : this.requestedBy,
@@ -227,7 +233,9 @@ export class MediaRequest {
: Notification.MEDIA_APPROVED
: Notification.MEDIA_DECLINED,
{
- subject: tv.name,
+ subject: `${tv.name}${
+ tv.first_air_date ? ` (${tv.first_air_date.slice(0, 4)})` : ''
+ }`,
message: tv.overview,
image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${tv.poster_path}`,
notifyUser: autoApproved ? undefined : this.requestedBy,
@@ -492,7 +500,9 @@ export class MediaRequest {
);
notificationManager.sendNotification(Notification.MEDIA_FAILED, {
- subject: movie.title,
+ subject: `${movie.title}${
+ movie.release_date ? ` (${movie.release_date.slice(0, 4)})` : ''
+ }`,
message: movie.overview,
media,
image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${movie.poster_path}`,
@@ -700,7 +710,11 @@ export class MediaRequest {
);
notificationManager.sendNotification(Notification.MEDIA_FAILED, {
- subject: series.name,
+ subject: `${series.name}${
+ series.first_air_date
+ ? ` (${series.first_air_date.slice(0, 4)})`
+ : ''
+ }`,
message: series.overview,
image: `https://image.tmdb.org/t/p/w600_and_h900_bestv2${series.poster_path}`,
media,
diff --git a/server/lib/notifications/index.ts b/server/lib/notifications/index.ts
index f1f237f5..70af56ba 100644
--- a/server/lib/notifications/index.ts
+++ b/server/lib/notifications/index.ts
@@ -1,5 +1,4 @@
import logger from '../../logger';
-import { getSettings } from '../settings';
import type { NotificationAgent, NotificationPayload } from './agents/agent';
export enum Notification {
@@ -45,13 +44,13 @@ class NotificationManager {
type: Notification,
payload: NotificationPayload
): void {
- const settings = getSettings().notifications;
logger.info(`Sending notification(s) for ${Notification[type]}`, {
label: 'Notifications',
subject: payload.subject,
});
+
this.activeAgents.forEach((agent) => {
- if (settings.enabled && agent.shouldSend(type)) {
+ if (agent.shouldSend(type)) {
agent.send(type, payload);
}
});
diff --git a/server/lib/settings.ts b/server/lib/settings.ts
index bb82c7ef..290d4040 100644
--- a/server/lib/settings.ts
+++ b/server/lib/settings.ts
@@ -179,7 +179,6 @@ interface NotificationAgents {
}
interface NotificationSettings {
- enabled: boolean;
agents: NotificationAgents;
}
@@ -234,7 +233,6 @@ class Settings {
initialized: false,
},
notifications: {
- enabled: true,
agents: {
email: {
enabled: false,
diff --git a/server/routes/user/index.ts b/server/routes/user/index.ts
index 0c904691..6546d666 100644
--- a/server/routes/user/index.ts
+++ b/server/routes/user/index.ts
@@ -84,7 +84,10 @@ router.post(
const passedExplicitPassword = body.password && body.password.length > 0;
const avatar = gravatarUrl(body.email, { default: 'mm', size: 200 });
- if (!passedExplicitPassword && !settings.notifications.agents.email) {
+ if (
+ !passedExplicitPassword &&
+ !settings.notifications.agents.email.enabled
+ ) {
throw new Error('Email notifications must be enabled');
}
diff --git a/src/components/Settings/Notifications/NotificationsDiscord.tsx b/src/components/Settings/Notifications/NotificationsDiscord.tsx
index ecaff4b0..b70baf28 100644
--- a/src/components/Settings/Notifications/NotificationsDiscord.tsx
+++ b/src/components/Settings/Notifications/NotificationsDiscord.tsx
@@ -18,7 +18,7 @@ const messages = defineMessages({
webhookUrlPlaceholder: 'Server Settings → Integrations → Webhooks',
discordsettingssaved: 'Discord notification settings saved successfully!',
discordsettingsfailed: 'Discord notification settings failed to save.',
- testsent: 'Discord test notification sent!',
+ discordtestsent: 'Discord test notification sent!',
validationUrl: 'You must provide a valid URL',
});
@@ -96,7 +96,7 @@ const NotificationsDiscord: React.FC = () => {
},
});
- addToast(intl.formatMessage(messages.testsent), {
+ addToast(intl.formatMessage(messages.discordtestsent), {
appearance: 'info',
autoDismiss: true,
});
diff --git a/src/components/Settings/Notifications/NotificationsEmail.tsx b/src/components/Settings/Notifications/NotificationsEmail.tsx
index 1daca614..ac45e3e6 100644
--- a/src/components/Settings/Notifications/NotificationsEmail.tsx
+++ b/src/components/Settings/Notifications/NotificationsEmail.tsx
@@ -24,7 +24,7 @@ const messages = defineMessages({
authPass: 'SMTP Password',
emailsettingssaved: 'Email notification settings saved successfully!',
emailsettingsfailed: 'Email notification settings failed to save.',
- testsent: 'Email test notification sent!',
+ emailtestsent: 'Email test notification sent!',
allowselfsigned: 'Allow Self-Signed Certificates',
ssldisabletip:
'SSL should be disabled on standard TLS connections (port 587)',
@@ -188,7 +188,7 @@ const NotificationsEmail: React.FC = () => {
},
});
- addToast(intl.formatMessage(messages.testsent), {
+ addToast(intl.formatMessage(messages.emailtestsent), {
appearance: 'info',
autoDismiss: true,
});
diff --git a/src/components/Settings/Notifications/NotificationsTelegram.tsx b/src/components/Settings/Notifications/NotificationsTelegram.tsx
index 72b8d4dd..6f8c230b 100644
--- a/src/components/Settings/Notifications/NotificationsTelegram.tsx
+++ b/src/components/Settings/Notifications/NotificationsTelegram.tsx
@@ -22,7 +22,7 @@ const messages = defineMessages({
validationChatIdRequired: 'You must provide a valid chat ID',
telegramsettingssaved: 'Telegram notification settings saved successfully!',
telegramsettingsfailed: 'Telegram notification settings failed to save.',
- testsent: 'Telegram test notification sent!',
+ telegramtestsent: 'Telegram test notification sent!',
settinguptelegramDescription:
'To configure Telegram notifications, you will need to create a bot and get the bot API key. Additionally, you will need the chat ID for the chat to which you would like to send notifications. You can find this by adding @get_id_bot to the chat and issuing the /my_id command.',
sendSilently: 'Send Silently',
@@ -113,7 +113,7 @@ const NotificationsTelegram: React.FC = () => {
},
});
- addToast(intl.formatMessage(messages.testsent), {
+ addToast(intl.formatMessage(messages.telegramtestsent), {
appearance: 'info',
autoDismiss: true,
});
diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json
index 7807ff62..bab294b3 100644
--- a/src/i18n/locale/en.json
+++ b/src/i18n/locale/en.json
@@ -290,11 +290,13 @@
"components.Settings.Notifications.chatId": "Chat ID",
"components.Settings.Notifications.discordsettingsfailed": "Discord notification settings failed to save.",
"components.Settings.Notifications.discordsettingssaved": "Discord notification settings saved successfully!",
+ "components.Settings.Notifications.discordtestsent": "Discord test notification sent!",
"components.Settings.Notifications.emailNotificationTypesAlertDescription": "Media Requested, Media Automatically Approved, and Media Failed email notifications are sent to all users with the Manage Requests permission.",
"components.Settings.Notifications.emailNotificationTypesAlertDescriptionPt2": "Media Approved, Media Declined, and Media Available email notifications are sent to the user who submitted the request.",
"components.Settings.Notifications.emailsender": "Sender Address",
"components.Settings.Notifications.emailsettingsfailed": "Email notification settings failed to save.",
"components.Settings.Notifications.emailsettingssaved": "Email notification settings saved successfully!",
+ "components.Settings.Notifications.emailtestsent": "Email test notification sent!",
"components.Settings.Notifications.enableSsl": "Enable SSL",
"components.Settings.Notifications.pgpPassword": "PGP Password",
"components.Settings.Notifications.pgpPasswordTip": "Sign encrypted email messages using OpenPGP",
@@ -309,7 +311,7 @@
"components.Settings.Notifications.ssldisabletip": "SSL should be disabled on standard TLS connections (port 587)",
"components.Settings.Notifications.telegramsettingsfailed": "Telegram notification settings failed to save.",
"components.Settings.Notifications.telegramsettingssaved": "Telegram notification settings saved successfully!",
- "components.Settings.Notifications.testsent": "Telegram test notification sent!",
+ "components.Settings.Notifications.telegramtestsent": "Telegram test notification sent!",
"components.Settings.Notifications.validationBotAPIRequired": "You must provide a bot authentication token",
"components.Settings.Notifications.validationChatIdRequired": "You must provide a valid chat ID",
"components.Settings.Notifications.validationEmail": "You must provide a valid email address",