From ff4de38385049bf8f6e1d76d8511854fcfabc71c Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 2 Aug 2021 16:50:56 +0200 Subject: [PATCH] Filter videos by live in custom markup --- .../custom-markup.service.ts | 2 ++ .../channel-miniature-markup.component.ts | 2 +- .../playlist-miniature-markup.component.ts | 2 +- .../video-miniature-markup.component.ts | 2 +- .../videos-list-markup.component.ts | 4 ++- .../shared/shared-main/video/video.service.ts | 34 +++++++------------ .../shared-search/find-in-bulk.service.ts | 13 ++++--- .../custom-markup/custom-markup-data.model.ts | 2 ++ 8 files changed, 31 insertions(+), 30 deletions(-) diff --git a/client/src/app/shared/shared-custom-markup/custom-markup.service.ts b/client/src/app/shared/shared-custom-markup/custom-markup.service.ts index 089728a51..c9d33980e 100644 --- a/client/src/app/shared/shared-custom-markup/custom-markup.service.ts +++ b/client/src/app/shared/shared-custom-markup/custom-markup.service.ts @@ -191,6 +191,8 @@ export class CustomMarkupService { accountHandle: data.accountHandle || undefined, channelHandle: data.channelHandle || undefined, + isLive: this.buildBoolean(data.isLive), + filter: this.buildBoolean(data.onlyLocal) ? 'local' as VideoFilter : undefined } 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 bb099deae..5bb045a82 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 @@ -50,7 +50,7 @@ export class ChannelMiniatureMarkupComponent implements CustomMarkupComponent, O this.video = data[0] }, - err => this.notifier.error('Error in channel miniature component: ' + err.message) + err => this.notifier.error($localize`Error in channel miniature component: ${err.message}`) ) } 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 97d31c4a7..5a5c34867 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 @@ -44,7 +44,7 @@ export class PlaylistMiniatureMarkupComponent implements CustomMarkupComponent, .subscribe( playlist => this.playlist = playlist, - err => this.notifier.error('Error in playlist miniature component: ' + err.message) + err => this.notifier.error($localize`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 ba61aaf51..84c936ee7 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 @@ -56,7 +56,7 @@ export class VideoMiniatureMarkupComponent implements CustomMarkupComponent, OnI .subscribe( video => this.video = video, - err => this.notifier.error('Error in video miniature component: ' + err.message) + err => this.notifier.error($localize`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 d9f77802b..6473e9ba0 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 @@ -22,6 +22,7 @@ export class VideosListMarkupComponent implements CustomMarkupComponent, OnInit @Input() count: number @Input() onlyDisplayTitle: boolean @Input() filter: VideoFilter + @Input() isLive: boolean @Input() maxRows: number @Input() channelHandle: string @Input() accountHandle: string @@ -73,7 +74,7 @@ export class VideosListMarkupComponent implements CustomMarkupComponent, OnInit .subscribe( ({ data }) => this.videos = data, - err => this.notifier.error('Error in videos list component: ' + err.message) + err => this.notifier.error($localize`Error in videos list component: ${err.message}`) ) } @@ -86,6 +87,7 @@ export class VideosListMarkupComponent implements CustomMarkupComponent, OnInit categoryOneOf: this.categoryOneOf, languageOneOf: this.languageOneOf, filter: this.filter, + isLive: this.isLive, sort: this.sort as VideoSortField, account: { nameWithHost: this.accountHandle }, videoChannel: { nameWithHost: this.channelHandle } diff --git a/client/src/app/shared/shared-main/video/video.service.ts b/client/src/app/shared/shared-main/video/video.service.ts index 04a39be0e..4a97719fa 100644 --- a/client/src/app/shared/shared-main/video/video.service.ts +++ b/client/src/app/shared/shared-main/video/video.service.ts @@ -210,15 +210,16 @@ export class VideoService implements VideosProvider { } getVideos (parameters: { - videoPagination: ComponentPaginationLight, - sort: VideoSortField, - filter?: VideoFilter, - categoryOneOf?: number[], - languageOneOf?: string[], - skipCount?: boolean, + videoPagination: ComponentPaginationLight + sort: VideoSortField + filter?: VideoFilter + categoryOneOf?: number[] + languageOneOf?: string[] + isLive?: boolean + skipCount?: boolean nsfwPolicy?: NSFWPolicyType }): Observable> { - const { videoPagination, sort, filter, categoryOneOf, languageOneOf, skipCount, nsfwPolicy } = parameters + const { videoPagination, sort, filter, categoryOneOf, languageOneOf, skipCount, nsfwPolicy, isLive } = parameters const pagination = this.restService.componentPaginationToRestPagination(videoPagination) @@ -228,21 +229,10 @@ export class VideoService implements VideosProvider { if (filter) params = params.set('filter', filter) if (skipCount) params = params.set('skipCount', skipCount + '') - if (nsfwPolicy) { - params = params.set('nsfw', this.nsfwPolicyToParam(nsfwPolicy)) - } - - if (languageOneOf) { - for (const l of languageOneOf) { - params = params.append('languageOneOf[]', l) - } - } - - if (categoryOneOf) { - for (const c of categoryOneOf) { - params = params.append('categoryOneOf[]', c + '') - } - } + if (isLive) params = params.set('isLive', isLive) + if (nsfwPolicy) params = params.set('nsfw', this.nsfwPolicyToParam(nsfwPolicy)) + if (languageOneOf) this.restService.addArrayParams(params, 'languageOneOf', languageOneOf) + if (categoryOneOf) this.restService.addArrayParams(params, 'categoryOneOf', categoryOneOf) return this.authHttp .get>(VideoService.BASE_VIDEO_URL, { params }) diff --git a/client/src/app/shared/shared-search/find-in-bulk.service.ts b/client/src/app/shared/shared-search/find-in-bulk.service.ts index 0383d8648..61dd2cbc5 100644 --- a/client/src/app/shared/shared-search/find-in-bulk.service.ts +++ b/client/src/app/shared/shared-search/find-in-bulk.service.ts @@ -1,6 +1,6 @@ import * as debug from 'debug' -import { Observable, Subject } from 'rxjs' -import { map } from 'rxjs/operators' +import { Observable, Subject, throwError } from 'rxjs' +import { first, map } from 'rxjs/operators' import { Injectable, NgZone } from '@angular/core' import { buildBulkObservable } from '@app/helpers' import { ResultList } from '@shared/models/common' @@ -71,12 +71,17 @@ export class FindInBulkService { return new Observable(obs => { observableObject.result .pipe( + first(), map(({ data }) => data), map(data => data.find(finder)) ) .subscribe(result => { - obs.next(result) - obs.complete() + if (!result) { + obs.error(new Error($localize`Element ${param} not found`)) + } else { + obs.next(result) + obs.complete() + } }) observableObject.notifier.next(param) diff --git a/shared/models/custom-markup/custom-markup-data.model.ts b/shared/models/custom-markup/custom-markup-data.model.ts index 8cbe3cfa4..667eaad9c 100644 --- a/shared/models/custom-markup/custom-markup-data.model.ts +++ b/shared/models/custom-markup/custom-markup-data.model.ts @@ -36,6 +36,8 @@ export type VideosListMarkupData = { channelHandle?: string accountHandle?: string + isLive?: string // number + onlyLocal?: string // boolean }