From 2e257e36b78b6f6b842f5ed8b4c79514e6e3a208 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 24 Mar 2021 10:58:36 +0100 Subject: [PATCH] Add client action hooks for pubish pages --- .../video-go-live.component.ts | 13 +++++++++---- .../video-import-torrent.component.ts | 13 +++++++++---- .../video-import-url.component.ts | 15 ++++++++++----- .../video-upload.component.ts | 15 ++++++++++----- .../select/select-options.component.ts | 9 ++++++++- server/tests/plugins/filter-hooks.ts | 3 +-- shared/models/plugins/client-hook.model.ts | 9 +++++++++ 7 files changed, 56 insertions(+), 21 deletions(-) diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts index 8780ca567..8e035b6bb 100644 --- a/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts +++ b/client/src/app/+videos/+video-edit/video-add-components/video-go-live.component.ts @@ -1,8 +1,8 @@ import { forkJoin } from 'rxjs' -import { Component, EventEmitter, OnInit, Output } from '@angular/core' +import { AfterViewChecked, AfterViewInit, Component, EventEmitter, OnInit, Output } from '@angular/core' import { Router } from '@angular/router' -import { AuthService, CanComponentDeactivate, Notifier, ServerService } from '@app/core' +import { AuthService, CanComponentDeactivate, HooksService, Notifier, ServerService } from '@app/core' import { scrollToTop } from '@app/helpers' import { FormValidatorService } from '@app/shared/shared-forms' import { VideoCaptionService, VideoEdit, VideoService } from '@app/shared/shared-main' @@ -19,7 +19,7 @@ import { VideoSend } from './video-send' './video-send.scss' ] }) -export class VideoGoLiveComponent extends VideoSend implements OnInit, CanComponentDeactivate { +export class VideoGoLiveComponent extends VideoSend implements OnInit, AfterViewInit, CanComponentDeactivate { @Output() firstStepDone = new EventEmitter() @Output() firstStepError = new EventEmitter() @@ -41,7 +41,8 @@ export class VideoGoLiveComponent extends VideoSend implements OnInit, CanCompon protected videoService: VideoService, protected videoCaptionService: VideoCaptionService, private liveVideoService: LiveVideoService, - private router: Router + private router: Router, + private hooks: HooksService ) { super() } @@ -50,6 +51,10 @@ export class VideoGoLiveComponent extends VideoSend implements OnInit, CanCompon super.ngOnInit() } + ngAfterViewInit () { + this.hooks.runAction('action:go-live.init', 'video-edit') + } + canDeactivate () { return { canDeactivate: true } } diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts index 01087e525..3aae24732 100644 --- a/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts +++ b/client/src/app/+videos/+video-edit/video-add-components/video-import-torrent.component.ts @@ -1,6 +1,6 @@ -import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core' +import { AfterViewInit, Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core' import { Router } from '@angular/router' -import { AuthService, CanComponentDeactivate, Notifier, ServerService } from '@app/core' +import { AuthService, CanComponentDeactivate, HooksService, Notifier, ServerService } from '@app/core' import { scrollToTop } from '@app/helpers' import { FormValidatorService } from '@app/shared/shared-forms' import { VideoCaptionService, VideoEdit, VideoImportService, VideoService } from '@app/shared/shared-main' @@ -18,7 +18,7 @@ import { VideoSend } from './video-send' './video-send.scss' ] }) -export class VideoImportTorrentComponent extends VideoSend implements OnInit, CanComponentDeactivate { +export class VideoImportTorrentComponent extends VideoSend implements OnInit, AfterViewInit, CanComponentDeactivate { @Output() firstStepDone = new EventEmitter() @Output() firstStepError = new EventEmitter() @ViewChild('torrentfileInput') torrentfileInput: ElementRef @@ -43,7 +43,8 @@ export class VideoImportTorrentComponent extends VideoSend implements OnInit, Ca protected videoService: VideoService, protected videoCaptionService: VideoCaptionService, private router: Router, - private videoImportService: VideoImportService + private videoImportService: VideoImportService, + private hooks: HooksService ) { super() } @@ -52,6 +53,10 @@ export class VideoImportTorrentComponent extends VideoSend implements OnInit, Ca super.ngOnInit() } + ngAfterViewInit () { + this.hooks.runAction('action:video-torrent-import.init', 'video-edit') + } + canDeactivate () { return { canDeactivate: true } } diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts index c447c179d..7a9fe369f 100644 --- a/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts +++ b/client/src/app/+videos/+video-edit/video-add-components/video-import-url.component.ts @@ -1,7 +1,7 @@ import { map, switchMap } from 'rxjs/operators' -import { Component, EventEmitter, OnInit, Output } from '@angular/core' +import { AfterViewInit, Component, EventEmitter, OnInit, Output } from '@angular/core' import { Router } from '@angular/router' -import { AuthService, CanComponentDeactivate, Notifier, ServerService } from '@app/core' +import { AuthService, CanComponentDeactivate, HooksService, Notifier, ServerService } from '@app/core' import { getAbsoluteAPIUrl, scrollToTop } from '@app/helpers' import { FormValidatorService } from '@app/shared/shared-forms' import { VideoCaptionService, VideoEdit, VideoImportService, VideoService } from '@app/shared/shared-main' @@ -18,7 +18,7 @@ import { VideoSend } from './video-send' './video-send.scss' ] }) -export class VideoImportUrlComponent extends VideoSend implements OnInit, CanComponentDeactivate { +export class VideoImportUrlComponent extends VideoSend implements OnInit, AfterViewInit, CanComponentDeactivate { @Output() firstStepDone = new EventEmitter() @Output() firstStepError = new EventEmitter() @@ -42,8 +42,9 @@ export class VideoImportUrlComponent extends VideoSend implements OnInit, CanCom protected videoService: VideoService, protected videoCaptionService: VideoCaptionService, private router: Router, - private videoImportService: VideoImportService - ) { + private videoImportService: VideoImportService, + private hooks: HooksService + ) { super() } @@ -51,6 +52,10 @@ export class VideoImportUrlComponent extends VideoSend implements OnInit, CanCom super.ngOnInit() } + ngAfterViewInit () { + this.hooks.runAction('action:video-url-import.init', 'video-edit') + } + canDeactivate () { return { canDeactivate: true } } diff --git a/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts b/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts index ca21b61cd..effb37077 100644 --- a/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts +++ b/client/src/app/+videos/+video-edit/video-add-components/video-upload.component.ts @@ -1,15 +1,15 @@ import { Subscription } from 'rxjs' import { HttpErrorResponse, HttpEventType, HttpResponse } from '@angular/common/http' -import { Component, ElementRef, EventEmitter, OnDestroy, OnInit, Output, ViewChild } from '@angular/core' +import { AfterViewInit, Component, ElementRef, EventEmitter, OnDestroy, OnInit, Output, ViewChild } from '@angular/core' import { Router } from '@angular/router' -import { AuthService, CanComponentDeactivate, Notifier, ServerService, UserService } from '@app/core' +import { AuthService, CanComponentDeactivate, HooksService, Notifier, ServerService, UserService } from '@app/core' import { scrollToTop, uploadErrorHandler } from '@app/helpers' import { FormValidatorService } from '@app/shared/shared-forms' import { BytesPipe, VideoCaptionService, VideoEdit, VideoService } from '@app/shared/shared-main' import { LoadingBarService } from '@ngx-loading-bar/core' +import { HttpStatusCode } from '@shared/core-utils/miscs/http-error-codes' import { VideoPrivacy } from '@shared/models' import { VideoSend } from './video-send' -import { HttpStatusCode } from '@shared/core-utils/miscs/http-error-codes' @Component({ selector: 'my-video-upload', @@ -20,7 +20,7 @@ import { HttpStatusCode } from '@shared/core-utils/miscs/http-error-codes' './video-send.scss' ] }) -export class VideoUploadComponent extends VideoSend implements OnInit, OnDestroy, CanComponentDeactivate { +export class VideoUploadComponent extends VideoSend implements OnInit, AfterViewInit, OnDestroy, CanComponentDeactivate { @Output() firstStepDone = new EventEmitter() @Output() firstStepError = new EventEmitter() @ViewChild('videofileInput') videofileInput: ElementRef @@ -60,7 +60,8 @@ export class VideoUploadComponent extends VideoSend implements OnInit, OnDestroy protected videoService: VideoService, protected videoCaptionService: VideoCaptionService, private userService: UserService, - private router: Router + private router: Router, + private hooks: HooksService ) { super() } @@ -79,6 +80,10 @@ export class VideoUploadComponent extends VideoSend implements OnInit, OnDestroy }) } + ngAfterViewInit () { + this.hooks.runAction('action:video-upload.init', 'video-edit') + } + ngOnDestroy () { if (this.videoUploadObservable) this.videoUploadObservable.unsubscribe() } diff --git a/client/src/app/shared/shared-forms/select/select-options.component.ts b/client/src/app/shared/shared-forms/select/select-options.component.ts index 2890670e5..8482b9dea 100644 --- a/client/src/app/shared/shared-forms/select/select-options.component.ts +++ b/client/src/app/shared/shared-forms/select/select-options.component.ts @@ -1,4 +1,4 @@ -import { Component, forwardRef, Input } from '@angular/core' +import { Component, forwardRef, HostListener, Input } from '@angular/core' import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms' import { SelectOptionsItem } from '../../../../types/select-options-item.model' @@ -26,6 +26,13 @@ export class SelectOptionsComponent implements ControlValueAccessor { propagateChange = (_: any) => { /* empty */ } + // Allow plugins to update our value + @HostListener('change', [ '$event.target' ]) + handleChange (event: any) { + this.writeValue(event.value) + this.onModelChange() + } + writeValue (id: number | string) { this.selectedId = id } diff --git a/server/tests/plugins/filter-hooks.ts b/server/tests/plugins/filter-hooks.ts index 6f7fec767..ac958c5f5 100644 --- a/server/tests/plugins/filter-hooks.ts +++ b/server/tests/plugins/filter-hooks.ts @@ -2,6 +2,7 @@ import 'mocha' import * as chai from 'chai' +import { advancedVideoChannelSearch } from '@shared/extra-utils/search/video-channels' import { ServerConfig } from '@shared/models' import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes' import { @@ -26,7 +27,6 @@ import { installPlugin, makeRawRequest, registerUser, - searchVideo, setAccessTokensToServers, setDefaultVideoChannel, updateCustomSubConfig, @@ -46,7 +46,6 @@ import { VideoPrivacy } from '../../../shared/models/videos' import { VideoCommentThreadTree } from '../../../shared/models/videos/video-comment.model' -import { advancedVideoChannelSearch } from '@shared/extra-utils/search/video-channels' const expect = chai.expect diff --git a/shared/models/plugins/client-hook.model.ts b/shared/models/plugins/client-hook.model.ts index 19622e09e..6c92ef3c6 100644 --- a/shared/models/plugins/client-hook.model.ts +++ b/shared/models/plugins/client-hook.model.ts @@ -85,6 +85,15 @@ export const clientActionHookObject = { // Fired when the registration page is being initialized 'action:signup.register.init': true, + // Fired when the video upload page is being initalized + 'action:video-upload.init': true, + // Fired when the video import by URL page is being initalized + 'action:video-url-import.init': true, + // Fired when the video import by torrent/magnet URI page is being initalized + 'action:video-torrent-import.init': true, + // Fired when the "Go Live" page is being initalized + 'action:go-live.init': true, + // Fired when the modal to download a video/caption is shown 'action:modal.video-download.shown': true, -- 2.41.0