+ this.routeSub = this.route.params
+ .pipe(
+ map(params => params[ 'videoChannelName' ]),
+ distinctUntilChanged(),
+ switchMap(videoChannelName => this.videoChannelService.getVideoChannel(videoChannelName)),
+ catchError(err => this.restExtractor.redirectTo404IfNotFound(err, 'other', [
+ HttpStatusCode.BAD_REQUEST_400,
+ HttpStatusCode.NOT_FOUND_404
+ ]))
+ )
+ .subscribe(async videoChannel => {
+ this.channelDescriptionHTML = await this.markdown.textMarkdownToHTML(videoChannel.description)
+ this.ownerDescriptionHTML = await this.markdown.textMarkdownToHTML(videoChannel.ownerAccount.description)
+
+ // After the markdown renderer to avoid layout changes
+ this.videoChannel = videoChannel
+
+ this.loadChannelVideosCount()
+ })
+
+ this.hotkeys = [
+ new Hotkey('S', (event: KeyboardEvent): boolean => {
+ this.subscribeButton.subscribed ?
+ this.subscribeButton.unsubscribe() :
+ this.subscribeButton.subscribe()
+ return false
+ }, undefined, $localize`Subscribe to the account`)
+ ]
+ if (this.isUserLoggedIn()) this.hotkeysService.add(this.hotkeys)
+
+ this.links = [
+ { label: $localize`VIDEOS`, routerLink: 'videos' },
+ { label: $localize`PLAYLISTS`, routerLink: 'video-playlists' }
+ ]
+ }
+
+ ngOnDestroy () {
+ if (this.routeSub) this.routeSub.unsubscribe()
+
+ // Unbind hotkeys
+ if (this.isUserLoggedIn()) this.hotkeysService.remove(this.hotkeys)
+ }
+
+ isInSmallView () {
+ return this.screenService.isInSmallView()
+ }
+
+ isUserLoggedIn () {
+ return this.authService.isLoggedIn()
+ }
+
+ isManageable () {
+ if (!this.isUserLoggedIn()) return false
+
+ return this.videoChannel?.ownerAccount.userId === this.authService.getUser().id
+ }
+
+ activateCopiedMessage () {
+ this.notifier.success($localize`Username copied`)
+ }
+
+ hasShowMoreDescription () {
+ return !this.channelDescriptionExpanded && this.channelDescriptionHTML.length > 100
+ }
+
+ showSupportModal () {
+ this.supportModal.show()
+ }
+
+ getAccountUrl () {
+ return [ '/a', this.videoChannel.ownerBy ]
+ }