From 7557f3e2b95b30352d19cc321d09b77b383c9ece Mon Sep 17 00:00:00 2001 From: advplyr Date: Tue, 24 Dec 2024 13:04:54 -0600 Subject: [PATCH] Fix plugin scan to not include subdirs, update external plugin path env variable to DEV_PLUGINS_PATH to support a folder of dev plugins --- index.js | 2 +- server/managers/PluginManager.js | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/index.js b/index.js index 585fe7f3..97e71fa4 100644 --- a/index.js +++ b/index.js @@ -14,7 +14,7 @@ if (isDev) { if (devEnv.AllowIframe) process.env.ALLOW_IFRAME = '1' if (devEnv.BackupPath) process.env.BACKUP_PATH = devEnv.BackupPath if (devEnv.AllowPlugins) process.env.ALLOW_PLUGINS = '1' - if (devEnv.ExternalPluginPath) process.env.EXTERNAL_PLUGIN_PATH = devEnv.ExternalPluginPath + if (devEnv.DevPluginsPath) process.env.DEV_PLUGINS_PATH = devEnv.DevPluginsPath process.env.SOURCE = 'local' process.env.ROUTER_BASE_PATH = devEnv.RouterBasePath || '' } diff --git a/server/managers/PluginManager.js b/server/managers/PluginManager.js index 9a070981..f9d48066 100644 --- a/server/managers/PluginManager.js +++ b/server/managers/PluginManager.js @@ -146,31 +146,20 @@ class PluginManager { /** * Get all plugins from the /metadata/plugins directory */ - async getPluginsFromFileSystem() { - await fsExtra.ensureDir(this.pluginMetadataPath) - + async getPluginsFromDirPath(pluginsPath) { // Get all directories in the plugins directory - const pluginDirs = await fsExtra.readdir(this.pluginMetadataPath, { withFileTypes: true, recursive: true }).then((files) => files.filter((file) => file.isDirectory())) + const pluginDirs = await fsExtra.readdir(pluginsPath, { withFileTypes: true }).then((files) => files.filter((file) => file.isDirectory())) const pluginsFound = [] for (const pluginDir of pluginDirs) { Logger.debug(`[PluginManager] Checking if directory "${pluginDir.name}" is a plugin`) - const plugin = await this.loadPlugin(pluginDir.name, Path.join(this.pluginMetadataPath, pluginDir.name)) + const plugin = await this.loadPlugin(pluginDir.name, Path.join(pluginsPath, pluginDir.name)) if (plugin) { Logger.debug(`[PluginManager] Found plugin "${plugin.manifest.name}"`) pluginsFound.push(plugin) } } - if (process.env.EXTERNAL_PLUGIN_PATH) { - const pluginName = Path.basename(process.env.EXTERNAL_PLUGIN_PATH) - const plugin = await this.loadPlugin(pluginName, process.env.EXTERNAL_PLUGIN_PATH) - if (plugin) { - Logger.debug(`[PluginManager] Found external plugin "${plugin.manifest.name}"`) - pluginsFound.push(plugin) - } else { - Logger.error(`[PluginManager] External plugin not found or invalid`) - } - } + return pluginsFound } @@ -178,7 +167,18 @@ class PluginManager { * Load plugins from the /metadata/plugins directory and update the database */ async loadPlugins() { - const pluginsFound = await this.getPluginsFromFileSystem() + await fsExtra.ensureDir(this.pluginMetadataPath) + + const pluginsFound = await this.getPluginsFromDirPath(this.pluginMetadataPath) + + if (process.env.DEV_PLUGINS_PATH) { + const devPluginsFound = await this.getPluginsFromDirPath(process.env.DEV_PLUGINS_PATH) + if (!devPluginsFound.length) { + Logger.warn(`[PluginManager] No plugins found in DEV_PLUGINS_PATH: ${process.env.DEV_PLUGINS_PATH}`) + } else { + pluginsFound.push(...devPluginsFound) + } + } const existingPlugins = await Database.pluginModel.findAll()