X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Froot-helpers%2Fplugins-manager.ts;h=61731032ad7f8cbed25bddd558370b246fdc01f2;hb=0ffa7a0ef3340f869ede1a5efbf473fef416daba;hp=9cba633738254321066562c6c314dab8ec3b87da;hpb=0882c8e6509b2a4ea48f6c48ecb2aa4aa371500a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/root-helpers/plugins-manager.ts b/client/src/root-helpers/plugins-manager.ts index 9cba63373..61731032a 100644 --- a/client/src/root-helpers/plugins-manager.ts +++ b/client/src/root-helpers/plugins-manager.ts @@ -7,37 +7,46 @@ import { getHookType, internalRunHook } from '@shared/core-utils/plugins/hooks' import { ClientHookName, clientHookObject, - ClientScript, + ClientScriptJSON, HTMLServerConfig, PluginClientScope, PluginType, RegisterClientFormFieldOptions, RegisterClientHookOptions, - RegisterClientSettingsScript, + RegisterClientRouteOptions, + RegisterClientSettingsScriptOptions, RegisterClientVideoFieldOptions, RegisteredExternalAuthConfig, ServerConfigPlugin -} from '../../../shared/models' +} from '@shared/models' import { environment } from '../environments/environment' -import { ClientScript as ClientScriptModule } from '../types/client-script.model' +import { ClientScript } from '../types' interface HookStructValue extends RegisterClientHookOptions { plugin: ServerConfigPlugin - clientScript: ClientScript + clientScript: ClientScriptJSON } type Hooks = { [ name: string ]: HookStructValue[] } type PluginInfo = { plugin: ServerConfigPlugin - clientScript: ClientScript + clientScript: ClientScriptJSON pluginType: PluginType isTheme: boolean } type PeertubeHelpersFactory = (pluginInfo: PluginInfo) => RegisterClientHelpers -type OnFormFields = (options: RegisterClientFormFieldOptions, videoFormOptions: RegisterClientVideoFieldOptions) => void -type OnSettingsScripts = (pluginInfo: PluginInfo, options: RegisterClientSettingsScript) => void + +type OnFormFields = ( + pluginInfo: PluginInfo, + options: RegisterClientFormFieldOptions, + videoFormOptions: RegisterClientVideoFieldOptions +) => void + +type OnSettingsScripts = (pluginInfo: PluginInfo, options: RegisterClientSettingsScriptOptions) => void + +type OnClientRoute = (options: RegisterClientRouteOptions) => void const logger = debug('peertube:plugins') @@ -64,15 +73,18 @@ class PluginsManager { private readonly peertubeHelpersFactory: PeertubeHelpersFactory private readonly onFormFields: OnFormFields private readonly onSettingsScripts: OnSettingsScripts + private readonly onClientRoute: OnClientRoute constructor (options: { peertubeHelpersFactory: PeertubeHelpersFactory onFormFields?: OnFormFields onSettingsScripts?: OnSettingsScripts + onClientRoute?: OnClientRoute }) { this.peertubeHelpersFactory = options.peertubeHelpersFactory this.onFormFields = options.onFormFields this.onSettingsScripts = options.onSettingsScripts + this.onClientRoute = options.onClientRoute } static getPluginPathPrefix (isTheme: boolean) { @@ -218,10 +230,10 @@ class PluginsManager { throw new Error('Video field registration is not supported') } - return this.onFormFields(commonOptions, videoFormOptions) + return this.onFormFields(pluginInfo, commonOptions, videoFormOptions) } - const registerSettingsScript = (options: RegisterClientSettingsScript) => { + const registerSettingsScript = (options: RegisterClientSettingsScriptOptions) => { if (!this.onSettingsScripts) { throw new Error('Registering settings script is not supported') } @@ -229,13 +241,29 @@ class PluginsManager { return this.onSettingsScripts(pluginInfo, options) } + const registerClientRoute = (options: RegisterClientRouteOptions) => { + if (!this.onClientRoute) { + throw new Error('Registering client route is not supported') + } + + return this.onClientRoute(options) + } + const peertubeHelpers = this.peertubeHelpersFactory(pluginInfo) console.log('Loading script %s of plugin %s.', clientScript.script, plugin.name) const absURL = (environment.apiUrl || window.location.origin) + clientScript.script return dynamicImport(absURL) - .then((script: ClientScriptModule) => script.register({ registerHook, registerVideoField, registerSettingsScript, peertubeHelpers })) + .then((script: ClientScript) => { + return script.register({ + registerHook, + registerVideoField, + registerSettingsScript, + registerClientRoute, + peertubeHelpers + }) + }) .then(() => this.sortHooksByPriority()) .catch(err => console.error('Cannot import or register plugin %s.', pluginInfo.plugin.name, err)) }