From 71904d090be0505bb4df94eeeebe81aa0c4a3e41 Mon Sep 17 00:00:00 2001 From: lesion Date: Thu, 13 Oct 2022 12:30:47 +0200 Subject: [PATCH] finish plugins setup --- components/admin/Plugin.vue | 23 ++++++++++++++--------- server/api/controller/plugins.js | 17 ++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/components/admin/Plugin.vue b/components/admin/Plugin.vue index ee5f05c6..26358aed 100644 --- a/components/admin/Plugin.vue +++ b/components/admin/Plugin.vue @@ -3,18 +3,24 @@ v-container v-card-title {{ $t('common.plugins') }} v-spacer v-card-subtitle(v-html="$t('admin.plugins_description')") - - v-dialog(v-model='dialog' width='600' :fullscreen='$vuetify.breakpoint.xsOnly') + v-dialog(v-if='selectedPlugin.settingsValue' v-model='dialog' width='600' :fullscreen='$vuetify.breakpoint.xsOnly') v-card v-card-title {{ $t('admin.config_plugin') }} - {{ selectedPlugin.name }} v-card-text v-form(v-model='valid' ref='form' lazy-validation) - div(v-for='(setting, name) in selectedPlugin.settings') - v-text-field(v-if='setting.type === "TEXT"' v-model='selectedPlugin.settingsValue[name]' type='text' :label='setting.description') - v-text-field(v-if='setting.type === "NUMBER"' v-model='selectedPlugin.settingsValue[name]' type='number' :label='setting.description') - v-switch(v-if='setting.type === "CHECK"' v-model='selectedPlugin.settingsValue[name]' :label='setting.description') - v-select(v-if='setting.type === "LIST"' v-model='selectedPlugin.settingsValue[name]' :items='setting.items' :label='setting.description') + v-row(v-for='(setting, name) in selectedPlugin.settings' :key='name' mt-2) + v-col.col-4 + small(v-html='setting.hint') + v-col.col-8 + v-text-field(v-if='setting.type === "TEXT"' v-model='selectedPlugin.settingsValue[name]' + type='text' :label='setting.description' + persistent-hint + :rules="[setting.required ? $validators.required(setting.description) : false]") + v-text-field(v-if='setting.type === "NUMBER"' v-model='selectedPlugin.settingsValue[name]' type='number' :label='setting.description') + v-switch(v-if='setting.type === "CHECK"' v-model='selectedPlugin.settingsValue[name]' :label='setting.description') + v-select(v-if='setting.type === "LIST"' v-model='selectedPlugin.settingsValue[name]' :items='setting.items' :label='setting.description') + v-switch(:label="$t('common.enable')" inset color='primary' v-model='selectedPlugin.settingsValue["enable"]') v-card-actions v-spacer v-btn(@click='dialog = false' outlined color='warning') {{ $t('common.cancel') }} @@ -23,8 +29,7 @@ v-container v-card-text v-card(v-for='plugin in plugins' :key='plugin.name' max-width="400" elevation='10' color='secondary' dark) - v-card-title.d-block {{ plugin.name }} - v-switch.float-right(:label="$t('common.enable')" v-model='plugin.settingsValue.enable' @change='toggleEnable(plugin)') + v-card-title {{ plugin.name }} v-card-text p {{ plugin.description }} blockquote author: {{ plugin.author }} diff --git a/server/api/controller/plugins.js b/server/api/controller/plugins.js index 9a0f6006..8732b8b2 100644 --- a/server/api/controller/plugins.js +++ b/server/api/controller/plugins.js @@ -8,11 +8,11 @@ const pluginController = { getAll(_req, res) { const settingsController = require('./settings') // return plugins and inner settings - const plugins = pluginController.plugins.map(p => { - if (settingsController.settings['plugin_' + p.name]) { - p.settingsValue = settingsController.settings['plugin_' + p.name] + const plugins = pluginController.plugins.map( ({ configuration }) => { + if (settingsController.settings['plugin_' + configuration.name]) { + configuration.settingsValue = settingsController.settings['plugin_' + configuration.name] } - return p + return configuration }) return res.json(plugins) }, @@ -34,7 +34,7 @@ const pluginController = { unloadPlugin(pluginName) { const settingsController = require('./settings') - const plugin = pluginController.plugins.find(p => p.name === pluginName) + const plugin = pluginController.plugins.find(p => p.configuration.name === pluginName) const settings = settingsController.settings['plugin_' + pluginName] if (!plugin) { log.warn(`Plugin ${pluginName} not found`) @@ -60,7 +60,7 @@ const pluginController = { loadPlugin(pluginName) { const settingsController = require('./settings') - const plugin = pluginController.plugins.find(p => p.name === pluginName) + const plugin = pluginController.plugins.find(p => p.configuration.name === pluginName) const settings = settingsController.settings['plugin_' + pluginName] if (!plugin) { log.warn(`Plugin ${pluginName} not found`) @@ -78,7 +78,7 @@ const pluginController = { notifier.emitter.on('Update', plugin.onEventUpdate) } - if (plugin.unload && typeof plugin.unload === 'function') { + if (plugin.load && typeof plugin.load === 'function') { plugin.load({ settings: settingsController.settings }, settings) } }, @@ -95,10 +95,9 @@ const pluginController = { plugins.forEach(pluginFile => { try { const plugin = require(pluginFile) - if (typeof plugin.load !== 'function') return const name = plugin.configuration.name console.log(`Found plugin '${name}'`) - pluginController.plugins.push(plugin.configuration) + pluginController.plugins.push(plugin) console.error(settingsController.settings['plugin_' + name]) if (settingsController.settings['plugin_' + name]) { const pluginSetting = settingsController.settings['plugin_' + name]