diff --git a/server/Server.js b/server/Server.js index 8649c5ad8..1010451df 100644 --- a/server/Server.js +++ b/server/Server.js @@ -68,7 +68,7 @@ class Server { // Managers this.notificationManager = new NotificationManager() this.emailManager = new EmailManager() - this.backupManager = new BackupManager() + this.backupManager = new BackupManager(this.notificationManager) this.abMergeManager = new AbMergeManager() this.playbackSessionManager = new PlaybackSessionManager() this.podcastManager = new PodcastManager(this.watcher, this.notificationManager) diff --git a/server/managers/BackupManager.js b/server/managers/BackupManager.js index 88772c586..a6982de13 100644 --- a/server/managers/BackupManager.js +++ b/server/managers/BackupManager.js @@ -16,9 +16,10 @@ const { getFileSize } = require('../utils/fileUtils') const Backup = require('../objects/Backup') class BackupManager { - constructor() { + constructor(notificationManager) { this.ItemsMetadataPath = Path.join(global.MetadataPath, 'items') this.AuthorsMetadataPath = Path.join(global.MetadataPath, 'authors') + this.notificationManager = notificationManager this.scheduleTask = null @@ -322,13 +323,18 @@ class BackupManager { } // Check remove oldest backup - if (this.backups.length > this.backupsToKeep) { + const removeOldest = this.backups.length > this.backupsToKeep + if (removeOldest) { this.backups.sort((a, b) => a.createdAt - b.createdAt) const oldBackup = this.backups.shift() Logger.debug(`[BackupManager] Removing old backup ${oldBackup.id}`) this.removeBackup(oldBackup) } + + // Notifications only for auto downloaded episodes + this.notificationManager.onBackupCompleted(newBackup, this.backups.length, removeOldest) + return true } diff --git a/server/managers/NotificationManager.js b/server/managers/NotificationManager.js index 7f4cd34fb..ec723db91 100644 --- a/server/managers/NotificationManager.js +++ b/server/managers/NotificationManager.js @@ -36,6 +36,20 @@ class NotificationManager { this.triggerNotification('onPodcastEpisodeDownloaded', eventData) } + async onBackupCompleted(backup, totalBackupCount, removedOldest) { + if (!Database.notificationSettings.isUseable) return + + Logger.debug(`[NotificationManager] onBackupCompleted: Backup completed`) + const eventData = { + completionTime: backup.createdAt, + backupPath: backup.fullPath, + backupSize: backup.fileSize, + backupCount: totalBackupCount || 'Invalid', + removedOldest: removedOldest || 'false' + } + this.triggerNotification('onBackupCompleted', eventData) + } + onTest() { this.triggerNotification('onTest') } diff --git a/server/utils/notifications.js b/server/utils/notifications.js index c90e34086..36c337e02 100644 --- a/server/utils/notifications.js +++ b/server/utils/notifications.js @@ -27,6 +27,23 @@ module.exports.notificationData = { episodeDescription: 'Some description of the podcast episode.' } }, + { + name: 'onBackupCompleted', + requiresLibrary: false, + description: 'Triggered when a backup is completed', + variables: ['completionTime', 'backupPath', 'backupSize', 'backupCount', 'removedOldest'], + defaults: { + title: 'Backup Completed', + body: 'Backup has been completed successfully.\n\nPath: {{backupPath}}\nSize: {{backupSize}}\nCount: {{backupCount}}\nRemoved Oldest: {{removedOldest}}' + }, + testData: { + completionTime: '12:00 AM', + backupPath: 'path/to/backup', + backupSize: '1.23 MB', + backupCount: '1', + removedOldest: 'false' + } + }, { name: 'onTest', requiresLibrary: false,