X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fcore%2Fplugins%2Fhooks.service.ts;h=29db75d89bea8b7d24ddb073d517cdb4bee4fc6f;hb=2c8380a46f34631e705b1564938343cacfa4b0bc;hp=24274183129ec55c5b5f26ab09ec624edc6a6bb3;hpb=c2023a9f027deb310248ad751cc96a21a8e1ed03;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/core/plugins/hooks.service.ts b/client/src/app/core/plugins/hooks.service.ts index 242741831..29db75d89 100644 --- a/client/src/app/core/plugins/hooks.service.ts +++ b/client/src/app/core/plugins/hooks.service.ts @@ -1,10 +1,10 @@ -import { Injectable } from '@angular/core' -import { PluginService } from '@app/core/plugins/plugin.service' -import { ClientActionHookName, ClientFilterHookName } from '@shared/models/plugins/client-hook.model' import { from, Observable } from 'rxjs' import { mergeMap, switchMap } from 'rxjs/operators' -import { ServerService } from '@app/core/server' -import { PluginClientScope } from '@shared/models/plugins/plugin-client-scope.type' +import { Injectable } from '@angular/core' +import { PluginService } from '@app/core/plugins/plugin.service' +import { logger } from '@root-helpers/logger' +import { ClientActionHookName, ClientFilterHookName, PluginClientScope } from '@shared/models' +import { AuthService, AuthStatus } from '../auth' type RawFunction = (params: U) => T type ObservableFunction = RawFunction> @@ -12,41 +12,58 @@ type ObservableFunction = RawFunction> @Injectable() export class HooksService { constructor ( - private server: ServerService, + private authService: AuthService, private pluginService: PluginService - ) { } + ) { + // Run auth hooks + this.authService.userInformationLoaded + .subscribe(() => this.runAction('action:auth-user.information-loaded', 'common', { user: this.authService.getUser() })) + + this.authService.loginChangedSource.subscribe(obj => { + if (obj === AuthStatus.LoggedIn) { + this.runAction('action:auth-user.logged-in', 'common') + } else if (obj === AuthStatus.LoggedOut) { + this.runAction('action:auth-user.logged-out', 'common') + } + }) + } - wrapObsFun - - (fun: ObservableFunction, params: P, scope: PluginClientScope, hookParamName: H1, hookResultName: H2) - { + wrapObsFun + (fun: ObservableFunction, params: P, scope: PluginClientScope, hookParamName: H1, hookResultName: H2) { return from(this.pluginService.ensurePluginsAreLoaded(scope)) .pipe( - mergeMap(() => this.wrapObject(params, hookParamName)), + mergeMap(() => this.wrapObjectWithoutScopeLoad(params, hookParamName)), switchMap(params => fun(params)), mergeMap(result => this.pluginService.runHook(hookResultName, result, params)) ) } - async wrapFun - - (fun: RawFunction, params: P, scope: PluginClientScope, hookParamName: H1, hookResultName: H2) - { + async wrapFun + (fun: RawFunction, params: P, scope: PluginClientScope, hookParamName: H1, hookResultName: H2) { await this.pluginService.ensurePluginsAreLoaded(scope) - const newParams = await this.wrapObject(params, hookParamName) + const newParams = await this.wrapObjectWithoutScopeLoad(params, hookParamName) const result = fun(newParams) return this.pluginService.runHook(hookResultName, result, params) } runAction (hookName: U, scope: PluginClientScope, params?: T) { - this.pluginService.ensurePluginsAreLoaded(scope) + // Use setTimeout to give priority to Angular change detector + setTimeout(() => { + this.pluginService.ensurePluginsAreLoaded(scope) .then(() => this.pluginService.runHook(hookName, undefined, params)) - .catch((err: any) => console.error('Fatal hook error.', { err })) + .catch((err: any) => logger.error('Fatal hook error.', err)) + }) + } + + async wrapObject (result: T, scope: PluginClientScope, hookName: U) { + await this.pluginService.ensurePluginsAreLoaded(scope) + + return this.wrapObjectWithoutScopeLoad(result, hookName) } - private wrapObject (result: T, hookName: U) { + private wrapObjectWithoutScopeLoad (result: T, hookName: U) { return this.pluginService.runHook(hookName, result) } }