From 7cd8d7f44d999565e6ca2941704158519c78b869 Mon Sep 17 00:00:00 2001 From: advplyr Date: Fri, 27 Sep 2024 17:33:23 -0500 Subject: [PATCH] Update NotificationManager to singleton --- server/Server.js | 6 ++---- server/controllers/NotificationController.js | 9 +++++---- server/managers/BackupManager.js | 11 +++++------ server/managers/NotificationManager.js | 2 +- server/managers/PodcastManager.js | 6 +++--- server/routers/ApiRouter.js | 2 -- 6 files changed, 16 insertions(+), 20 deletions(-) diff --git a/server/Server.js b/server/Server.js index 17466e86..7e541e61 100644 --- a/server/Server.js +++ b/server/Server.js @@ -23,7 +23,6 @@ const HlsRouter = require('./routers/HlsRouter') const PublicRouter = require('./routers/PublicRouter') const LogManager = require('./managers/LogManager') -const NotificationManager = require('./managers/NotificationManager') const EmailManager = require('./managers/EmailManager') const AbMergeManager = require('./managers/AbMergeManager') const CacheManager = require('./managers/CacheManager') @@ -67,12 +66,11 @@ class Server { this.auth = new Auth() // Managers - this.notificationManager = new NotificationManager() this.emailManager = new EmailManager() - this.backupManager = new BackupManager(this.notificationManager) + this.backupManager = new BackupManager() this.abMergeManager = new AbMergeManager() this.playbackSessionManager = new PlaybackSessionManager() - this.podcastManager = new PodcastManager(this.watcher, this.notificationManager) + this.podcastManager = new PodcastManager(this.watcher) this.audioMetadataManager = new AudioMetadataMangaer() this.rssFeedManager = new RssFeedManager() this.cronManager = new CronManager(this.podcastManager, this.playbackSessionManager) diff --git a/server/controllers/NotificationController.js b/server/controllers/NotificationController.js index 215afe0a..b3fd7240 100644 --- a/server/controllers/NotificationController.js +++ b/server/controllers/NotificationController.js @@ -1,6 +1,7 @@ const { Request, Response, NextFunction } = require('express') const Database = require('../Database') const { version } = require('../../package.json') +const NotificationManager = require('../managers/NotificationManager') /** * @typedef RequestUserObject @@ -23,7 +24,7 @@ class NotificationController { */ get(req, res) { res.json({ - data: this.notificationManager.getData(), + data: NotificationManager.getData(), settings: Database.notificationSettings }) } @@ -52,7 +53,7 @@ class NotificationController { * @param {Response} res */ getData(req, res) { - res.json(this.notificationManager.getData()) + res.json(NotificationManager.getData()) } /** @@ -64,7 +65,7 @@ class NotificationController { * @param {Response} res */ async fireTestEvent(req, res) { - await this.notificationManager.triggerNotification('onTest', { version: `v${version}` }, req.query.fail === '1') + await NotificationManager.triggerNotification('onTest', { version: `v${version}` }, req.query.fail === '1') res.sendStatus(200) } @@ -121,7 +122,7 @@ class NotificationController { async sendNotificationTest(req, res) { if (!Database.notificationSettings.isUseable) return res.status(400).send('Apprise is not configured') - const success = await this.notificationManager.sendTestNotification(req.notification) + const success = await NotificationManager.sendTestNotification(req.notification) if (success) res.sendStatus(200) else res.sendStatus(500) } diff --git a/server/managers/BackupManager.js b/server/managers/BackupManager.js index 54727b6b..102521b7 100644 --- a/server/managers/BackupManager.js +++ b/server/managers/BackupManager.js @@ -15,13 +15,12 @@ const { getFileSize } = require('../utils/fileUtils') const Backup = require('../objects/Backup') const CacheManager = require('./CacheManager') +const NotificationManager = require('./NotificationManager') class BackupManager { - constructor(notificationManager) { + constructor() { this.ItemsMetadataPath = Path.join(global.MetadataPath, 'items') this.AuthorsMetadataPath = Path.join(global.MetadataPath, 'authors') - /** @type {import('./NotificationManager')} */ - this.notificationManager = notificationManager this.scheduleTask = null @@ -301,7 +300,7 @@ class BackupManager { const sqliteBackupPath = await this.backupSqliteDb(newBackup).catch((error) => { Logger.error(`[BackupManager] Failed to backup sqlite db`, error) const errorMsg = error?.message || error || 'Unknown Error' - this.notificationManager.onBackupFailed(errorMsg) + NotificationManager.onBackupFailed(errorMsg) return false }) @@ -313,7 +312,7 @@ class BackupManager { const zipResult = await this.zipBackup(sqliteBackupPath, newBackup).catch((error) => { Logger.error(`[BackupManager] Backup Failed ${error}`) const errorMsg = error?.message || error || 'Unknown Error' - this.notificationManager.onBackupFailed(errorMsg) + NotificationManager.onBackupFailed(errorMsg) return false }) @@ -344,7 +343,7 @@ class BackupManager { } // Notification for backup successfully completed - this.notificationManager.onBackupCompleted(newBackup, this.backups.length, removeOldest) + NotificationManager.onBackupCompleted(newBackup, this.backups.length, removeOldest) return true } diff --git a/server/managers/NotificationManager.js b/server/managers/NotificationManager.js index a59c1281..c48e878c 100644 --- a/server/managers/NotificationManager.js +++ b/server/managers/NotificationManager.js @@ -180,4 +180,4 @@ class NotificationManager { }) } } -module.exports = NotificationManager +module.exports = new NotificationManager() diff --git a/server/managers/PodcastManager.js b/server/managers/PodcastManager.js index 4e6c3fb8..503f47c0 100644 --- a/server/managers/PodcastManager.js +++ b/server/managers/PodcastManager.js @@ -14,6 +14,7 @@ const ffmpegHelpers = require('../utils/ffmpegHelpers') const TaskManager = require('./TaskManager') const CoverManager = require('../managers/CoverManager') +const NotificationManager = require('../managers/NotificationManager') const LibraryFile = require('../objects/files/LibraryFile') const PodcastEpisodeDownload = require('../objects/PodcastEpisodeDownload') @@ -22,9 +23,8 @@ const AudioFile = require('../objects/files/AudioFile') const LibraryItem = require('../objects/LibraryItem') class PodcastManager { - constructor(watcher, notificationManager) { + constructor(watcher) { this.watcher = watcher - this.notificationManager = notificationManager this.downloadQueue = [] this.currentDownload = null @@ -203,7 +203,7 @@ class PodcastManager { if (this.currentDownload.isAutoDownload) { // Notifications only for auto downloaded episodes - this.notificationManager.onPodcastEpisodeDownloaded(libraryItem, podcastEpisode) + NotificationManager.onPodcastEpisodeDownloaded(libraryItem, podcastEpisode) } return true diff --git a/server/routers/ApiRouter.js b/server/routers/ApiRouter.js index f44fedb4..1e9d2745 100644 --- a/server/routers/ApiRouter.js +++ b/server/routers/ApiRouter.js @@ -55,8 +55,6 @@ class ApiRouter { this.rssFeedManager = Server.rssFeedManager /** @type {import('../managers/CronManager')} */ this.cronManager = Server.cronManager - /** @type {import('../managers/NotificationManager')} */ - this.notificationManager = Server.notificationManager /** @type {import('../managers/EmailManager')} */ this.emailManager = Server.emailManager this.apiCacheManager = Server.apiCacheManager