From 231ff4af3bdb864d6bc66e487b12275e5f1fb44f Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 2 Nov 2021 11:50:03 +0100 Subject: Add ability to exclude muted accounts --- .../video-caption/video-caption.service.ts | 6 +- .../app/shared/shared-main/video/video.service.ts | 79 ++++++++++++++++------ 2 files changed, 62 insertions(+), 23 deletions(-) (limited to 'client/src/app/shared') diff --git a/client/src/app/shared/shared-main/video-caption/video-caption.service.ts b/client/src/app/shared/shared-main/video-caption/video-caption.service.ts index 283c63f98..29d6d0f4c 100644 --- a/client/src/app/shared/shared-main/video-caption/video-caption.service.ts +++ b/client/src/app/shared/shared-main/video-caption/video-caption.service.ts @@ -18,7 +18,7 @@ export class VideoCaptionService { ) {} listCaptions (videoId: number | string): Observable> { - return this.authHttp.get>(VideoService.BASE_VIDEO_URL + videoId + '/captions') + return this.authHttp.get>(`${VideoService.BASE_VIDEO_URL}/${videoId}/captions`) .pipe( switchMap(captionsResult => { return this.serverService.getServerLocale() @@ -41,7 +41,7 @@ export class VideoCaptionService { } removeCaption (videoId: number | string, language: string) { - return this.authHttp.delete(VideoService.BASE_VIDEO_URL + videoId + '/captions/' + language) + return this.authHttp.delete(`${VideoService.BASE_VIDEO_URL}/${videoId}/captions/${language}`) .pipe( map(this.restExtractor.extractDataBool), catchError(res => this.restExtractor.handleError(res)) @@ -52,7 +52,7 @@ export class VideoCaptionService { const body = { captionfile } const data = objectToFormData(body) - return this.authHttp.put(VideoService.BASE_VIDEO_URL + videoId + '/captions/' + language, data) + return this.authHttp.put(`${VideoService.BASE_VIDEO_URL}/${videoId}/captions/${language}`, data) .pipe( map(this.restExtractor.extractDataBool), catchError(res => this.restExtractor.handleError(res)) 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 819847ac6..b7c563dca 100644 --- a/client/src/app/shared/shared-main/video/video.service.ts +++ b/client/src/app/shared/shared-main/video/video.service.ts @@ -5,6 +5,7 @@ import { HttpClient, HttpParams, HttpRequest } from '@angular/common/http' import { Injectable } from '@angular/core' import { ComponentPaginationLight, RestExtractor, RestPagination, RestService, ServerService, UserService } from '@app/core' import { objectToFormData } from '@app/helpers' +import { AdvancedInputFilter } from '@app/shared/shared-forms' import { BooleanBothQuery, FeedFormat, @@ -60,18 +61,18 @@ export class VideoService { ) {} getVideoViewUrl (uuid: string) { - return VideoService.BASE_VIDEO_URL + '/' + uuid + '/views' + return `${VideoService.BASE_VIDEO_URL}/${uuid}/views` } getUserWatchingVideoUrl (uuid: string) { - return VideoService.BASE_VIDEO_URL + '/' + uuid + '/watching' + return `${VideoService.BASE_VIDEO_URL}/${uuid}/watching` } getVideo (options: { videoId: string }): Observable { return this.serverService.getServerLocale() .pipe( switchMap(translations => { - return this.authHttp.get(VideoService.BASE_VIDEO_URL + '/' + options.videoId) + return this.authHttp.get(`${VideoService.BASE_VIDEO_URL}/${options.videoId}`) .pipe(map(videoHash => ({ videoHash, translations }))) }), map(({ videoHash, translations }) => new VideoDetails(videoHash, translations)), @@ -111,7 +112,7 @@ export class VideoService { const data = objectToFormData(body) - return this.authHttp.put(VideoService.BASE_VIDEO_URL + '/' + video.id, data) + return this.authHttp.put(`${VideoService.BASE_VIDEO_URL}/${video.id}`, data) .pipe( map(this.restExtractor.extractDataBool), catchError(err => this.restExtractor.handleError(err)) @@ -119,7 +120,7 @@ export class VideoService { } uploadVideo (video: FormData) { - const req = new HttpRequest('POST', VideoService.BASE_VIDEO_URL + '/' + 'upload', video, { reportProgress: true }) + const req = new HttpRequest('POST', `${VideoService.BASE_VIDEO_URL}/upload`, video, { reportProgress: true }) return this.authHttp .request<{ video: { id: number, uuid: string } }>(req) @@ -204,25 +205,17 @@ export class VideoService { } getAdminVideos ( - parameters: CommonVideoParams & { pagination: RestPagination, search?: string } + options: CommonVideoParams & { pagination: RestPagination, search?: string } ): Observable> { - const { pagination, search } = parameters - - const include = VideoInclude.BLACKLISTED | - VideoInclude.BLOCKED_OWNER | - VideoInclude.HIDDEN_PRIVACY | - VideoInclude.NOT_PUBLISHED_STATE | - VideoInclude.FILES + const { pagination, search } = options let params = new HttpParams() - params = this.buildCommonVideosParams({ params, include, ...parameters }) + params = this.buildCommonVideosParams({ params, ...options }) params = params.set('start', pagination.start.toString()) .set('count', pagination.count.toString()) - if (search) { - params = this.buildAdminParamsFromSearch(search, params) - } + params = this.buildAdminParamsFromSearch(search, params) return this.authHttp .get>(VideoService.BASE_VIDEO_URL, { params }) @@ -321,7 +314,7 @@ export class VideoService { return from(ids) .pipe( - concatMap(id => this.authHttp.delete(VideoService.BASE_VIDEO_URL + '/' + id)), + concatMap(id => this.authHttp.delete(`${VideoService.BASE_VIDEO_URL}/${id}`)), toArray(), catchError(err => this.restExtractor.handleError(err)) ) @@ -413,7 +406,7 @@ export class VideoService { } private setVideoRate (id: number, rateType: UserVideoRateType) { - const url = VideoService.BASE_VIDEO_URL + '/' + id + '/rate' + const url = `${VideoService.BASE_VIDEO_URL}/${id}/rate` const body: UserVideoRateUpdate = { rating: rateType } @@ -460,14 +453,60 @@ export class VideoService { return newParams } + buildAdminInputFilter (): AdvancedInputFilter[] { + return [ + { + title: $localize`Videos scope`, + children: [ + { + queryParams: { search: 'isLocal:false' }, + label: $localize`Remote videos` + }, + { + queryParams: { search: 'isLocal:true' }, + label: $localize`Local videos` + } + ] + }, + + { + title: $localize`Include/Exclude`, + children: [ + { + queryParams: { search: 'excludeMuted' }, + label: $localize`Exclude muted accounts` + } + ] + } + ] + } + private buildAdminParamsFromSearch (search: string, params: HttpParams) { + let include = VideoInclude.BLACKLISTED | + VideoInclude.BLOCKED_OWNER | + VideoInclude.HIDDEN_PRIVACY | + VideoInclude.NOT_PUBLISHED_STATE | + VideoInclude.FILES + + if (!search) return this.restService.addObjectParams(params, { include }) + const filters = this.restService.parseQueryStringFilter(search, { isLocal: { prefix: 'isLocal:', isBoolean: true + }, + excludeMuted: { + prefix: 'excludeMuted', + handler: () => true } }) - return this.restService.addObjectParams(params, filters) + if (filters.excludeMuted) { + include &= ~VideoInclude.BLOCKED_OWNER + + filters.excludeMuted = undefined + } + + return this.restService.addObjectParams(params, { ...filters, include }) } } -- cgit v1.2.3