Update notifications to first check if any are active for an event, update JS docs

This commit is contained in:
advplyr 2024-08-18 14:28:26 -05:00
parent 7231bc5997
commit 0da9938698
4 changed files with 63 additions and 13 deletions

View file

@ -19,6 +19,7 @@ class BackupManager {
constructor(notificationManager) {
this.ItemsMetadataPath = Path.join(global.MetadataPath, 'items')
this.AuthorsMetadataPath = Path.join(global.MetadataPath, 'authors')
/** @type {import('./NotificationManager')} */
this.notificationManager = notificationManager
this.scheduleTask = null
@ -293,7 +294,8 @@ class BackupManager {
// Create backup sqlite file
const sqliteBackupPath = await this.backupSqliteDb(newBackup).catch((error) => {
Logger.error(`[BackupManager] Failed to backup sqlite db`, error)
this.notificationManager.onBackupFailed(error)
const errorMsg = error?.message || error || 'Unknown Error'
this.notificationManager.onBackupFailed(errorMsg)
return false
})
@ -304,7 +306,8 @@ class BackupManager {
// Zip sqlite file, /metadata/items, and /metadata/authors folders
const zipResult = await this.zipBackup(sqliteBackupPath, newBackup).catch((error) => {
Logger.error(`[BackupManager] Backup Failed ${error}`)
this.notificationManager.onBackupFailed(error)
const errorMsg = error?.message || error || 'Unknown Error'
this.notificationManager.onBackupFailed(errorMsg)
return false
})
@ -354,7 +357,6 @@ class BackupManager {
/**
* @see https://github.com/TryGhost/node-sqlite3/pull/1116
* @param {Backup} backup
* @promise
*/
backupSqliteDb(backup) {
const db = new sqlite3.Database(Database.dbPath)

View file

@ -17,6 +17,11 @@ class NotificationManager {
async onPodcastEpisodeDownloaded(libraryItem, episode) {
if (!Database.notificationSettings.isUseable) return
if (!Database.notificationSettings.getHasActiveNotificationsForEvent('onPodcastEpisodeDownloaded')) {
Logger.debug(`[NotificationManager] onPodcastEpisodeDownloaded: No active notifications`)
return
}
Logger.debug(`[NotificationManager] onPodcastEpisodeDownloaded: Episode "${episode.title}" for podcast ${libraryItem.media.metadata.title}`)
const library = await Database.libraryModel.getOldById(libraryItem.libraryId)
const eventData = {
@ -36,9 +41,20 @@ class NotificationManager {
this.triggerNotification('onPodcastEpisodeDownloaded', eventData)
}
/**
*
* @param {import('../objects/Backup')} backup
* @param {number} totalBackupCount
* @param {boolean} removedOldest - If oldest backup was removed
*/
async onBackupCompleted(backup, totalBackupCount, removedOldest) {
if (!Database.notificationSettings.isUseable) return
if (!Database.notificationSettings.getHasActiveNotificationsForEvent('onBackupCompleted')) {
Logger.debug(`[NotificationManager] onBackupCompleted: No active notifications`)
return
}
Logger.debug(`[NotificationManager] onBackupCompleted: Backup completed`)
const eventData = {
completionTime: backup.createdAt,
@ -50,10 +66,19 @@ class NotificationManager {
this.triggerNotification('onBackupCompleted', eventData)
}
/**
*
* @param {string} errorMsg
*/
async onBackupFailed(errorMsg) {
if (!Database.notificationSettings.isUseable) return
Logger.debug(`[NotificationManager] onBackupFailed: Backup failed`)
if (!Database.notificationSettings.getHasActiveNotificationsForEvent('onBackupFailed')) {
Logger.debug(`[NotificationManager] onBackupFailed: No active notifications`)
return
}
Logger.debug(`[NotificationManager] onBackupFailed: Backup failed (${errorMsg})`)
const eventData = {
errorMsg: errorMsg || 'Backup failed'
}
@ -64,6 +89,12 @@ class NotificationManager {
this.triggerNotification('onTest')
}
/**
*
* @param {string} eventName
* @param {any} eventData
* @param {boolean} [intentionallyFail=false] - If true, will intentionally fail the notification
*/
async triggerNotification(eventName, eventData, intentionallyFail = false) {
if (!Database.notificationSettings.isUseable) return
@ -93,7 +124,12 @@ class NotificationManager {
this.notificationFinished()
}
// Return TRUE if notification should be triggered now
/**
*
* @param {string} eventName
* @param {any} eventData
* @returns {boolean} - TRUE if notification should be triggered now
*/
checkTriggerNotification(eventName, eventData) {
if (this.sendingNotification) {
if (this.notificationQueue.length >= Database.notificationSettings.maxNotificationQueue) {