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'
'./video-send.scss'
]
})
-export class VideoGoLiveComponent extends VideoSend implements OnInit, CanComponentDeactivate {
+export class VideoGoLiveComponent extends VideoSend implements OnInit, AfterViewInit, CanComponentDeactivate {
@Output() firstStepDone = new EventEmitter<string>()
@Output() firstStepError = new EventEmitter<void>()
protected videoService: VideoService,
protected videoCaptionService: VideoCaptionService,
private liveVideoService: LiveVideoService,
- private router: Router
+ private router: Router,
+ private hooks: HooksService
) {
super()
}
super.ngOnInit()
}
+ ngAfterViewInit () {
+ this.hooks.runAction('action:go-live.init', 'video-edit')
+ }
+
canDeactivate () {
return { canDeactivate: true }
}
-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'
'./video-send.scss'
]
})
-export class VideoImportTorrentComponent extends VideoSend implements OnInit, CanComponentDeactivate {
+export class VideoImportTorrentComponent extends VideoSend implements OnInit, AfterViewInit, CanComponentDeactivate {
@Output() firstStepDone = new EventEmitter<string>()
@Output() firstStepError = new EventEmitter<void>()
@ViewChild('torrentfileInput') torrentfileInput: ElementRef<HTMLInputElement>
protected videoService: VideoService,
protected videoCaptionService: VideoCaptionService,
private router: Router,
- private videoImportService: VideoImportService
+ private videoImportService: VideoImportService,
+ private hooks: HooksService
) {
super()
}
super.ngOnInit()
}
+ ngAfterViewInit () {
+ this.hooks.runAction('action:video-torrent-import.init', 'video-edit')
+ }
+
canDeactivate () {
return { canDeactivate: true }
}
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'
'./video-send.scss'
]
})
-export class VideoImportUrlComponent extends VideoSend implements OnInit, CanComponentDeactivate {
+export class VideoImportUrlComponent extends VideoSend implements OnInit, AfterViewInit, CanComponentDeactivate {
@Output() firstStepDone = new EventEmitter<string>()
@Output() firstStepError = new EventEmitter<void>()
protected videoService: VideoService,
protected videoCaptionService: VideoCaptionService,
private router: Router,
- private videoImportService: VideoImportService
- ) {
+ private videoImportService: VideoImportService,
+ private hooks: HooksService
+ ) {
super()
}
super.ngOnInit()
}
+ ngAfterViewInit () {
+ this.hooks.runAction('action:video-url-import.init', 'video-edit')
+ }
+
canDeactivate () {
return { canDeactivate: true }
}
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',
'./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<string>()
@Output() firstStepError = new EventEmitter<void>()
@ViewChild('videofileInput') videofileInput: ElementRef<HTMLInputElement>
protected videoService: VideoService,
protected videoCaptionService: VideoCaptionService,
private userService: UserService,
- private router: Router
+ private router: Router,
+ private hooks: HooksService
) {
super()
}
})
}
+ ngAfterViewInit () {
+ this.hooks.runAction('action:video-upload.init', 'video-edit')
+ }
+
ngOnDestroy () {
if (this.videoUploadObservable) this.videoUploadObservable.unsubscribe()
}
-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'
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
}
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 {
installPlugin,
makeRawRequest,
registerUser,
- searchVideo,
setAccessTokensToServers,
setDefaultVideoChannel,
updateCustomSubConfig,
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
// 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,