]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/root-helpers/plugins-manager.ts
Handle hook with Promise as result
[github/Chocobozzz/PeerTube.git] / client / src / root-helpers / plugins-manager.ts
index 37a52be722b3c70f4574fabbbc78c8076a37aae1..31510d4e644d22c8b4af65b0fc17493bbcc77da0 100644 (file)
@@ -69,7 +69,8 @@ class PluginsManager {
     login: new ReplaySubject<boolean>(1),
     'video-edit': new ReplaySubject<boolean>(1),
     embed: new ReplaySubject<boolean>(1),
-    'my-library': new ReplaySubject<boolean>(1)
+    'my-library': new ReplaySubject<boolean>(1),
+    'video-channel': new ReplaySubject<boolean>(1)
   }
 
   private readonly peertubeHelpersFactory: PeertubeHelpersFactory
@@ -104,16 +105,27 @@ class PluginsManager {
     }
   }
 
-  async runHook<T> (hookName: ClientHookName, result?: T, params?: any) {
-    if (!this.hooks[hookName]) return result
+  async runHook<T> (hookName: ClientHookName, resultArg?: T | Promise<T>, params?: any) {
+    if (!this.hooks[hookName]) {
+      // eslint-disable-next-line no-return-await
+      return await resultArg
+    }
 
     const hookType = getHookType(hookName)
 
+    let result = await resultArg
+
     for (const hook of this.hooks[hookName]) {
       logger.info(`Running hook ${hookName} of plugin ${hook.plugin.name}`)
 
-      result = await internalRunHook(hook.handler, hookType, result, params, err => {
-        logger.error(`Cannot run hook ${hookName} of script ${hook.clientScript.script} of plugin ${hook.plugin.name}`, err)
+      result = await internalRunHook({
+        handler: hook.handler,
+        hookType,
+        result,
+        params,
+        onError: err => {
+          logger.error(`Cannot run hook ${hookName} of script ${hook.clientScript.script} of plugin ${hook.plugin.name}`, err)
+        }
       })
     }