X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fplugins%2Fplugin-manager.ts;h=a46b97fa46cfb069a2dec56379bf41a23f59ab11;hb=7f529402d17a918136af7a1291e61a94c2e16f6d;hp=ff00ab9e8b5bd2d164fb63e3fbccd894380a8f90;hpb=c7cdac440970525d78d257a055899c26f6899a82;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/plugins/plugin-manager.ts b/server/lib/plugins/plugin-manager.ts index ff00ab9e8..a46b97fa4 100644 --- a/server/lib/plugins/plugin-manager.ts +++ b/server/lib/plugins/plugin-manager.ts @@ -3,9 +3,16 @@ import { createReadStream, createWriteStream } from 'fs' import { ensureDir, outputFile, readJSON } from 'fs-extra' import { basename, join } from 'path' import { decachePlugin } from '@server/helpers/decache' +import { ApplicationModel } from '@server/models/application/application' import { MOAuthTokenUser, MUser } from '@server/types/models' import { getCompleteLocale } from '@shared/core-utils' -import { ClientScriptJSON, PluginPackageJSON, PluginTranslation, PluginTranslationPathsJSON, RegisterServerHookOptions } from '@shared/models' +import { + ClientScriptJSON, + PluginPackageJSON, + PluginTranslation, + PluginTranslationPathsJSON, + RegisterServerHookOptions +} from '@shared/models' import { getHookType, internalRunHook } from '../../../shared/core-utils/plugins/hooks' import { PluginType } from '../../../shared/models/plugins/plugin.type' import { ServerHook, ServerHookName } from '../../../shared/models/plugins/server/server-hook.model' @@ -17,7 +24,7 @@ import { PluginModel } from '../../models/server/plugin' import { PluginLibrary, RegisterServerAuthExternalOptions, RegisterServerAuthPassOptions, RegisterServerOptions } from '../../types/plugins' import { ClientHtml } from '../client-html' import { RegisterHelpers } from './register-helpers' -import { installNpmPlugin, installNpmPluginFromDisk, removeNpmPlugin } from './yarn' +import { installNpmPlugin, installNpmPluginFromDisk, rebuildNativePlugins, removeNpmPlugin } from './yarn' export interface RegisteredPlugin { npmName: string @@ -209,8 +216,12 @@ export class PluginManager implements ServerHook { for (const hook of this.hooks[hookName]) { logger.debug('Running hook %s of plugin %s.', hookName, hook.npmName) - result = await internalRunHook(hook.handler, hookType, result, params, err => { - logger.error('Cannot run hook %s of plugin %s.', hookName, hook.pluginName, { err }) + result = await internalRunHook({ + handler: hook.handler, + hookType, + result, + params, + onError: err => { logger.error('Cannot run hook %s of plugin %s.', hookName, hook.pluginName, { err }) } }) } @@ -271,6 +282,8 @@ export class PluginManager implements ServerHook { logger.info('Regenerating registered plugin CSS to global file.') await this.regeneratePluginGlobalCSS() } + + ClientHtml.invalidCache() } // ###################### Installation ###################### @@ -372,6 +385,12 @@ export class PluginManager implements ServerHook { logger.info('Plugin %s uninstalled.', npmName) } + async rebuildNativePluginsIfNeeded () { + if (!await ApplicationModel.nodeABIChanged()) return + + return rebuildNativePlugins() + } + // ###################### Private register ###################### private async registerPluginOrTheme (plugin: PluginModel) { @@ -413,6 +432,8 @@ export class PluginManager implements ServerHook { } await this.addTranslations(plugin, npmName, packageJSON.translations) + + ClientHtml.invalidCache() } private async registerPlugin (plugin: PluginModel, pluginPath: string, packageJSON: PluginPackageJSON) { @@ -467,8 +488,6 @@ export class PluginManager implements ServerHook { // ###################### CSS ###################### private resetCSSGlobalFile () { - ClientHtml.invalidCache() - return outputFile(PLUGIN_GLOBAL_CSS_PATH, '') } @@ -476,8 +495,6 @@ export class PluginManager implements ServerHook { for (const cssPath of cssRelativePaths) { await this.concatFiles(join(pluginPath, cssPath), PLUGIN_GLOBAL_CSS_PATH) } - - ClientHtml.invalidCache() } private concatFiles (input: string, output: string) { @@ -557,7 +574,7 @@ export class PluginManager implements ServerHook { if (!this.hooks[options.target]) this.hooks[options.target] = [] this.hooks[options.target].push({ - npmName: npmName, + npmName, pluginName: plugin.name, handler: options.handler, priority: options.priority || 0