X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Fvideo%2Fvideo.service.ts;h=d66a1f809990ac78b9029551e833428d23b3fd6d;hb=5c20a45518c3afc40c9494cad4a78def92e5e288;hp=9962021545a6def2fa95527ed73f23222f3845b5;hpb=440d39c52d4efb878b6a2e21584d6b8f52072f27;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/shared/video/video.service.ts b/client/src/app/shared/video/video.service.ts index 996202154..d66a1f809 100644 --- a/client/src/app/shared/video/video.service.ts +++ b/client/src/app/shared/video/video.service.ts @@ -27,18 +27,21 @@ import { objectToFormData } from '@app/shared/misc/utils' import { Account } from '@app/shared/account/account.model' import { AccountService } from '@app/shared/account/account.service' import { VideoChannelService } from '@app/shared/video-channel/video-channel.service' -import { ServerService } from '@app/core' +import { ServerService, AuthService } from '@app/core' import { UserSubscriptionService } from '@app/shared/user-subscription/user-subscription.service' import { VideoChannel } from '@app/shared/video-channel/video-channel.model' import { I18n } from '@ngx-translate/i18n-polyfill' +import { NSFWPolicyType } from '@shared/models/videos/nsfw-policy.type' +import { FfprobeData } from 'fluent-ffmpeg' export interface VideosProvider { getVideos (parameters: { videoPagination: ComponentPaginationLight, sort: VideoSortField, filter?: VideoFilter, - categoryOneOf?: number, + categoryOneOf?: number[], languageOneOf?: string[] + nsfwPolicy: NSFWPolicyType }): Observable> } @@ -49,6 +52,8 @@ export class VideoService implements VideosProvider { constructor ( private authHttp: HttpClient, + private authService: AuthService, + private userService: UserService, private restExtractor: RestExtractor, private restService: RestService, private serverService: ServerService, @@ -157,13 +162,18 @@ export class VideoService implements VideosProvider { getVideoChannelVideos ( videoChannel: VideoChannel, videoPagination: ComponentPaginationLight, - sort: VideoSortField + sort: VideoSortField, + nsfwPolicy?: NSFWPolicyType ): Observable> { const pagination = this.restService.componentPaginationToRestPagination(videoPagination) let params = new HttpParams() params = this.restService.addRestGetParams(params, pagination, sort) + if (nsfwPolicy) { + params = params.set('nsfw', this.nsfwPolicyToParam(nsfwPolicy)) + } + return this.authHttp .get>(VideoChannelService.BASE_VIDEO_CHANNEL_URL + videoChannel.nameWithHost + '/videos', { params }) .pipe( @@ -197,11 +207,12 @@ export class VideoService implements VideosProvider { videoPagination: ComponentPaginationLight, sort: VideoSortField, filter?: VideoFilter, - categoryOneOf?: number, + categoryOneOf?: number[], languageOneOf?: string[], - skipCount?: boolean + skipCount?: boolean, + nsfwPolicy?: NSFWPolicyType }): Observable> { - const { videoPagination, sort, filter, categoryOneOf, languageOneOf, skipCount } = parameters + const { videoPagination, sort, filter, categoryOneOf, languageOneOf, skipCount, nsfwPolicy } = parameters const pagination = this.restService.componentPaginationToRestPagination(videoPagination) @@ -209,15 +220,24 @@ export class VideoService implements VideosProvider { params = this.restService.addRestGetParams(params, pagination, sort) if (filter) params = params.set('filter', filter) - if (categoryOneOf) params = params.set('categoryOneOf', categoryOneOf + '') 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 + '') + } + } + return this.authHttp .get>(VideoService.BASE_VIDEO_URL, { params }) .pipe( @@ -254,12 +274,16 @@ export class VideoService implements VideosProvider { return feeds } - getVideoFeedUrls (sort: VideoSortField, filter?: VideoFilter, categoryOneOf?: number) { + getVideoFeedUrls (sort: VideoSortField, filter?: VideoFilter, categoryOneOf?: number[]) { let params = this.restService.addRestGetParams(new HttpParams(), undefined, sort) if (filter) params = params.set('filter', filter) - if (categoryOneOf) params = params.set('categoryOneOf', categoryOneOf + '') + if (categoryOneOf) { + for (const c of categoryOneOf) { + params = params.append('categoryOneOf[]', c + '') + } + } return this.buildBaseFeedUrls(params) } @@ -278,6 +302,14 @@ export class VideoService implements VideosProvider { return this.buildBaseFeedUrls(params) } + getVideoFileMetadata (metadataUrl: string) { + return this.authHttp + .get(metadataUrl) + .pipe( + catchError(err => this.restExtractor.handleError(err)) + ) + } + removeVideo (id: number) { return this.authHttp .delete(VideoService.BASE_VIDEO_URL + id) @@ -355,6 +387,12 @@ export class VideoService implements VideosProvider { return base.filter(o => !!privacies.find(p => p.id === o.id)) } + nsfwPolicyToParam (nsfwPolicy: NSFWPolicyType) { + return nsfwPolicy === 'do_not_list' + ? 'false' + : 'both' + } + private setVideoRate (id: number, rateType: UserVideoRateType) { const url = VideoService.BASE_VIDEO_URL + id + '/rate' const body: UserVideoRateUpdate = {