X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Froot-helpers%2Fplugins.ts;h=5344c046833282623d28026b8f0384b2e2b28483;hb=251a82ffbb62c575d7aeb260dff22409dae39d73;hp=011721761682ee2a388c87a15ed74903967adcd8;hpb=f95628636b6ccdf3eae2449ca718e075b072f678;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/root-helpers/plugins.ts b/client/src/root-helpers/plugins.ts index 011721761..5344c0468 100644 --- a/client/src/root-helpers/plugins.ts +++ b/client/src/root-helpers/plugins.ts @@ -1,6 +1,15 @@ -import { getHookType, internalRunHook } from '@shared/core-utils/plugins/hooks' -import { ClientHookName, ClientScript, RegisterClientHookOptions, ServerConfigPlugin, PluginType, clientHookObject } from '../../../shared/models' import { RegisterClientHelpers } from 'src/types/register-client-option.model' +import { getHookType, internalRunHook } from '@shared/core-utils/plugins/hooks' +import { RegisterClientFormFieldOptions, RegisterClientVideoFieldOptions } from '@shared/models/plugins/register-client-form-field.model' +import { + ClientHookName, + clientHookObject, + ClientScript, + PluginType, + RegisterClientHookOptions, + ServerConfigPlugin, + RegisterClientSettingsScript +} from '../../../shared/models' import { ClientScript as ClientScriptModule } from '../types/client-script.model' import { importModule } from './utils' @@ -18,6 +27,13 @@ type PluginInfo = { isTheme: boolean } +type FormFields = { + video: { + commonOptions: RegisterClientFormFieldOptions + videoFormOptions: RegisterClientVideoFieldOptions + }[] +} + async function runHook (hooks: Hooks, hookName: ClientHookName, result?: T, params?: any) { if (!hooks[hookName]) return result @@ -34,7 +50,14 @@ async function runHook (hooks: Hooks, hookName: ClientHookName, result?: T, p return result } -function loadPlugin (hooks: Hooks, pluginInfo: PluginInfo, peertubeHelpersFactory: (pluginInfo: PluginInfo) => RegisterClientHelpers) { +function loadPlugin (options: { + hooks: Hooks + pluginInfo: PluginInfo + peertubeHelpersFactory: (pluginInfo: PluginInfo) => RegisterClientHelpers + formFields?: FormFields + onSettingsScripts?: (options: RegisterClientSettingsScript) => void +}) { + const { hooks, pluginInfo, peertubeHelpersFactory, formFields, onSettingsScripts } = options const { plugin, clientScript } = pluginInfo const registerHook = (options: RegisterClientHookOptions) => { @@ -54,12 +77,31 @@ function loadPlugin (hooks: Hooks, pluginInfo: PluginInfo, peertubeHelpersFactor }) } + const registerVideoField = (commonOptions: RegisterClientFormFieldOptions, videoFormOptions: RegisterClientVideoFieldOptions) => { + if (!formFields) { + throw new Error('Video field registration is not supported') + } + + formFields.video.push({ + commonOptions, + videoFormOptions + }) + } + + const registerSettingsScript = (options: RegisterClientSettingsScript) => { + if (!onSettingsScripts) { + throw new Error('Registering settings script is not supported') + } + + return onSettingsScripts(options) + } + const peertubeHelpers = peertubeHelpersFactory(pluginInfo) console.log('Loading script %s of plugin %s.', clientScript.script, plugin.name) return importModule(clientScript.script) - .then((script: ClientScriptModule) => script.register({ registerHook, peertubeHelpers })) + .then((script: ClientScriptModule) => script.register({ registerHook, registerVideoField, registerSettingsScript, peertubeHelpers })) .then(() => sortHooksByPriority(hooks)) .catch(err => console.error('Cannot import or register plugin %s.', pluginInfo.plugin.name, err)) } @@ -68,6 +110,7 @@ export { HookStructValue, Hooks, PluginInfo, + FormFields, loadPlugin, runHook }