From 8b61dcaf23a66d508c05641c9c09747bf03cdb48 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 1 Jul 2021 17:28:47 +0200 Subject: [PATCH] Homepage error handling --- .../channel-miniature-markup.component.ts | 39 ++++++++++--------- .../playlist-miniature-markup.component.ts | 14 ++++--- .../video-miniature-markup.component.ts | 15 ++++--- .../videos-list-markup.component.ts | 15 ++++--- 4 files changed, 47 insertions(+), 36 deletions(-) diff --git a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.ts b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.ts index a91debbef..7043a7ec9 100644 --- a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.ts +++ b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.ts @@ -1,6 +1,7 @@ -import { map, switchMap } from 'rxjs/operators' +import { from } from 'rxjs' +import { finalize, map, switchMap, tap } from 'rxjs/operators' import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core' -import { MarkdownService, UserService } from '@app/core' +import { MarkdownService, Notifier, UserService } from '@app/core' import { Video, VideoSortField } from '@shared/models/videos' import { VideoChannel, VideoChannelService, VideoService } from '../../shared-main' import { CustomMarkupComponent } from './shared' @@ -30,25 +31,33 @@ export class ChannelMiniatureMarkupComponent implements CustomMarkupComponent, O private markdown: MarkdownService, private channelService: VideoChannelService, private videoService: VideoService, - private userService: UserService + private userService: UserService, + private notifier: Notifier ) { } ngOnInit () { this.channelService.getVideoChannel(this.name) - .subscribe(async channel => { - this.channel = channel + .pipe( + tap(channel => this.channel = channel), + switchMap(() => from(this.markdown.textMarkdownToHTML(this.channel.description))), + tap(html => this.descriptionHTML = html), + switchMap(() => this.loadVideosObservable()), + finalize(() => this.loaded.emit(true)) + ).subscribe( + ({ total, data }) => { + this.totalVideos = total + this.video = data[0] + }, - this.descriptionHTML = await this.markdown.textMarkdownToHTML(channel.description) - - this.loadVideos() - }) + err => this.notifier.error('Error in channel miniature component: ' + err.message) + ) } getVideoChannelLink () { return [ '/c', this.channel.nameWithHost ] } - private loadVideos () { + private loadVideosObservable () { const videoOptions = { videoChannel: this.channel, videoPagination: { @@ -59,18 +68,10 @@ export class ChannelMiniatureMarkupComponent implements CustomMarkupComponent, O count: 1 } - this.userService.getAnonymousOrLoggedUser() + return this.userService.getAnonymousOrLoggedUser() .pipe( map(user => user.nsfwPolicy), switchMap(nsfwPolicy => this.videoService.getVideoChannelVideos({ ...videoOptions, nsfwPolicy })) ) - .subscribe({ - next: ({ total, data }) => { - this.totalVideos = total - this.video = data[0] - }, - - complete: () => this.loaded.emit(true) - }) } } diff --git a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/playlist-miniature-markup.component.ts b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/playlist-miniature-markup.component.ts index 42a42d711..ff8cc01db 100644 --- a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/playlist-miniature-markup.component.ts +++ b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/playlist-miniature-markup.component.ts @@ -1,4 +1,6 @@ +import { finalize } from 'rxjs/operators' import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core' +import { Notifier } from '@app/core' import { MiniatureDisplayOptions } from '../../shared-video-miniature' import { VideoPlaylist, VideoPlaylistService } from '../../shared-video-playlist' import { CustomMarkupComponent } from './shared' @@ -31,15 +33,17 @@ export class PlaylistMiniatureMarkupComponent implements CustomMarkupComponent, } constructor ( - private playlistService: VideoPlaylistService + private playlistService: VideoPlaylistService, + private notifier: Notifier ) { } ngOnInit () { this.playlistService.getVideoPlaylist(this.uuid) - .subscribe({ - next: playlist => this.playlist = playlist, + .pipe(finalize(() => this.loaded.emit(true))) + .subscribe( + playlist => this.playlist = playlist, - complete: () => this.loaded.emit(true) - }) + err => this.notifier.error('Error in playlist miniature component: ' + err.message) + ) } } diff --git a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/video-miniature-markup.component.ts b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/video-miniature-markup.component.ts index 6ee5123e0..47518abfd 100644 --- a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/video-miniature-markup.component.ts +++ b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/video-miniature-markup.component.ts @@ -1,5 +1,6 @@ +import { finalize } from 'rxjs/operators' import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core' -import { AuthService } from '@app/core' +import { AuthService, Notifier } from '@app/core' import { Video, VideoService } from '../../shared-main' import { MiniatureDisplayOptions } from '../../shared-video-miniature' import { CustomMarkupComponent } from './shared' @@ -34,7 +35,8 @@ export class VideoMiniatureMarkupComponent implements CustomMarkupComponent, OnI constructor ( private auth: AuthService, - private videoService: VideoService + private videoService: VideoService, + private notifier: Notifier ) { } getUser () { @@ -49,10 +51,11 @@ export class VideoMiniatureMarkupComponent implements CustomMarkupComponent, OnI } this.videoService.getVideo({ videoId: this.uuid }) - .subscribe({ - next: video => this.video = video, + .pipe(finalize(() => this.loaded.emit(true))) + .subscribe( + video => this.video = video, - complete: () => this.loaded.emit(true) - }) + err => this.notifier.error('Error in video miniature component: ' + err.message) + ) } } diff --git a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/videos-list-markup.component.ts b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/videos-list-markup.component.ts index 02738022e..afa4f4799 100644 --- a/client/src/app/shared/shared-custom-markup/peertube-custom-tags/videos-list-markup.component.ts +++ b/client/src/app/shared/shared-custom-markup/peertube-custom-tags/videos-list-markup.component.ts @@ -1,5 +1,6 @@ +import { finalize } from 'rxjs/operators' import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core' -import { AuthService } from '@app/core' +import { AuthService, Notifier } from '@app/core' import { VideoFilter, VideoSortField } from '@shared/models' import { Video, VideoService } from '../../shared-main' import { MiniatureDisplayOptions } from '../../shared-video-miniature' @@ -40,7 +41,8 @@ export class VideosListMarkupComponent implements CustomMarkupComponent, OnInit constructor ( private auth: AuthService, - private videoService: VideoService + private videoService: VideoService, + private notifier: Notifier ) { } getUser () { @@ -76,10 +78,11 @@ export class VideosListMarkupComponent implements CustomMarkupComponent, OnInit } this.videoService.getVideos(options) - .subscribe({ - next: ({ data }) => this.videos = data, + .pipe(finalize(() => this.loaded.emit(true))) + .subscribe( + ({ data }) => this.videos = data, - complete: () => this.loaded.emit(true) - }) + err => this.notifier.error('Error in videos list component: ' + err.message) + ) } }