audiobookshelf/server/objects/settings/NotificationSettings.js

77 lines
1.8 KiB
JavaScript
Raw Normal View History

2022-09-23 01:12:48 +02:00
const Notification = require('../Notification')
class NotificationSettings {
constructor(settings = null) {
this.id = 'notification-settings'
this.appriseType = 'api'
this.appriseApiUrl = null
this.notifications = []
if (settings) {
this.construct(settings)
}
}
construct(settings) {
this.appriseType = settings.appriseType
this.appriseApiUrl = settings.appriseApiUrl || null
this.notifications = (settings.notifications || []).map(n => new Notification(n))
}
toJSON() {
return {
id: this.id,
appriseType: this.appriseType,
appriseApiUrl: this.appriseApiUrl,
notifications: this.notifications.map(n => n.toJSON())
}
}
get isUseable() {
return !!this.appriseApiUrl
}
getNotificationsForEvent(eventName) {
return this.notifications.filter(n => n.eventName === eventName)
}
getNotification(id) {
return this.notifications.find(n => n.id === id)
}
removeNotification(id) {
if (this.notifications.some(n => n.id === id)) {
this.notifications = this.notifications.filter(n => n.id !== id)
return true
}
return false
}
update(payload) {
if (!payload) return false
if (payload.appriseApiUrl !== this.appriseApiUrl) {
this.appriseApiUrl = payload.appriseApiUrl || null
return true
}
return false
}
2022-09-23 01:12:48 +02:00
createNotification(payload) {
2022-09-23 01:12:48 +02:00
if (!payload) return false
// TODO: validate
const notification = new Notification()
notification.setData(payload)
this.notifications.push(notification)
return true
}
updateNotification(payload) {
2022-09-23 01:12:48 +02:00
if (!payload) return false
const notification = this.notifications.find(n => n.id === payload.id)
if (!notification) return false
return notification.update(payload)
}
}
module.exports = NotificationSettings