From 53951daa25a66d60c2d432ca998395d81fae5df0 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Thu, 11 Nov 2021 15:27:57 +0100 Subject: [PATCH] [notification] Ignore notifications for missing plugins, identify plugins by ID rather then name. --- api/src/stores/main.ts | 28 +++++++++++++--------------- src/boot/plugins.ts | 11 ++++++----- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/api/src/stores/main.ts b/api/src/stores/main.ts index eacb88d..3a38682 100644 --- a/api/src/stores/main.ts +++ b/api/src/stores/main.ts @@ -103,24 +103,22 @@ export const useMainStore = defineStore({ }, async loadNotifications(flaschengeist: FG_Plugin.Flaschengeist) { - const params = - this.notifications.length > 0 - ? { from: this.notifications[this.notifications.length - 1].time } - : {}; - const { data } = await api.get('/notifications', { params: params }); - const notifications: FG_Plugin.Notification[] = []; + const { data } = await api.get('/notifications', { + params: + this.notifications.length > 0 + ? { from: this.notifications[this.notifications.length - 1].time } + : {}, + }); + + const notes = [] as FG_Plugin.Notification[]; data.forEach((n) => { n.time = new Date(n.time); - notifications.push( - (flaschengeist?.plugins.filter((p) => p.name === n.plugin)[0]?.notification)( - /*|| - translateNotification*/ - n - ) - ); + const plugin = flaschengeist?.plugins.filter((p) => p.id === n.plugin)[0]; + if (!plugin) console.debug('Could not find a parser for this notification', n); + else notes.push(plugin.notification(n)); }); - this.notifications.push(...notifications); - return notifications; + this.notifications.push(...notes); + return notes; }, async removeNotification(id: number) { diff --git a/src/boot/plugins.ts b/src/boot/plugins.ts index 4c2f3c9..db7f4d0 100644 --- a/src/boot/plugins.ts +++ b/src/boot/plugins.ts @@ -231,7 +231,7 @@ function loadPlugin( backend: Backend ) { // Check if already loaded - if (loadedPlugins.plugins.findIndex((p) => p.name === plugin.name) !== -1) return true; + if (loadedPlugins.plugins.findIndex((p) => p.id === plugin.id) !== -1) return true; // Check backend dependencies if ( @@ -242,7 +242,7 @@ function loadPlugin( true) /* validate the version, semver440 from python is... tricky on node*/ ) ) { - console.error(`Plugin ${plugin.name}: Backend modules not satisfied`); + console.error(`Plugin ${plugin.id}: Backend modules not satisfied`); return false; } @@ -266,11 +266,12 @@ function loadPlugin( } if (plugin.widgets.length > 0) { - plugin.widgets.forEach((widget) => (widget.name = plugin.name + '_' + widget.name)); + plugin.widgets.forEach((widget) => (widget.name = plugin.id + '.' + widget.name)); Array.prototype.push.apply(loadedPlugins.widgets, plugin.widgets); } loadedPlugins.plugins.push({ + id: plugin.id, name: plugin.name, version: plugin.version, notification: plugin.notification?.bind({}) || translateNotification, @@ -315,13 +316,13 @@ export default boot(async ({ router, app }) => { const BreakError = {}; try { - PLUGINS.plugins.forEach((plugin, name) => { + PLUGINS.plugins.forEach((plugin, id) => { if (!loadPlugin(loadedPlugins, plugin, backend)) { void router.push({ name: 'error' }); Notify.create({ type: 'negative', - message: `Fehler beim Laden: Bitte wende dich an den Admin (error: PNF-${name}!`, + message: `Fehler beim Laden: Bitte wende dich an den Admin (error: PNF-${id}!`, timeout: 10000, progress: true, });