X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Fshared-main%2Fvideo%2Fvideo.service.ts;h=ac640c79186fc7ba0c9cc77a84e94023201b068a;hb=674d903b0e993b3a67836f3dabba80282d9900ab;hp=0e2d36081b56a84f90e690763b73f3f9f946abb4;hpb=c6c0fa6cd8fe8f752463d8982c3dbcd448739c4e;p=github%2FChocobozzz%2FPeerTube.git 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 0e2d36081..ac640c791 100644 --- a/client/src/app/shared/shared-main/video/video.service.ts +++ b/client/src/app/shared/shared-main/video/video.service.ts @@ -18,8 +18,7 @@ import { VideoFilter, VideoPrivacy, VideoSortField, - VideoUpdate, - VideoCreate + VideoUpdate } from '@shared/models' import { environment } from '../../../../environments/environment' import { Account } from '../account/account.model' @@ -44,6 +43,7 @@ export interface VideosProvider { export class VideoService implements VideosProvider { static BASE_VIDEO_URL = environment.apiUrl + '/api/v1/videos/' static BASE_FEEDS_URL = environment.apiUrl + '/feeds/videos.' + static BASE_SUBSCRIPTION_FEEDS_URL = environment.apiUrl + '/feeds/subscriptions.' constructor ( private authHttp: HttpClient, @@ -124,7 +124,17 @@ export class VideoService implements VideosProvider { let params = new HttpParams() params = this.restService.addRestGetParams(params, pagination, sort) - params = this.restService.addObjectParams(params, { search }) + + if (search) { + const filters = this.restService.parseQueryStringFilter(search, { + isLive: { + prefix: 'isLive:', + isBoolean: true + } + }) + + params = this.restService.addObjectParams(params, filters) + } return this.authHttp .get>(UserService.BASE_USERS_URL + 'me/videos', { params }) @@ -134,16 +144,33 @@ export class VideoService implements VideosProvider { ) } - getAccountVideos ( - account: Account, + getAccountVideos (parameters: { + account: Pick, videoPagination: ComponentPaginationLight, sort: VideoSortField - ): Observable> { + nsfwPolicy?: NSFWPolicyType + videoFilter?: VideoFilter + search?: string + }): Observable> { + const { account, videoPagination, sort, videoFilter, nsfwPolicy, search } = parameters + 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)) + } + + if (videoFilter) { + params = params.set('filter', videoFilter) + } + + if (search) { + params = params.set('search', search) + } + return this.authHttp .get>(AccountService.BASE_ACCOUNT_URL + account.nameWithHost + '/videos', { params }) .pipe( @@ -152,12 +179,15 @@ export class VideoService implements VideosProvider { ) } - getVideoChannelVideos ( - videoChannel: VideoChannel, + getVideoChannelVideos (parameters: { + videoChannel: Pick, videoPagination: ComponentPaginationLight, sort: VideoSortField, nsfwPolicy?: NSFWPolicyType - ): Observable> { + videoFilter?: VideoFilter + }): Observable> { + const { videoChannel, videoPagination, sort, nsfwPolicy, videoFilter } = parameters + const pagination = this.restService.componentPaginationToRestPagination(videoPagination) let params = new HttpParams() @@ -167,6 +197,10 @@ export class VideoService implements VideosProvider { params = params.set('nsfw', this.nsfwPolicyToParam(nsfwPolicy)) } + if (videoFilter) { + params = params.set('filter', videoFilter) + } + return this.authHttp .get>(VideoChannelService.BASE_VIDEO_CHANNEL_URL + videoChannel.nameWithHost + '/videos', { params }) .pipe( @@ -218,22 +252,22 @@ export class VideoService implements VideosProvider { ) } - buildBaseFeedUrls (params: HttpParams) { + buildBaseFeedUrls (params: HttpParams, base = VideoService.BASE_FEEDS_URL) { const feeds = [ { format: FeedFormat.RSS, label: 'media rss 2.0', - url: VideoService.BASE_FEEDS_URL + FeedFormat.RSS.toLowerCase() + url: base + FeedFormat.RSS.toLowerCase() }, { format: FeedFormat.ATOM, label: 'atom 1.0', - url: VideoService.BASE_FEEDS_URL + FeedFormat.ATOM.toLowerCase() + url: base + FeedFormat.ATOM.toLowerCase() }, { format: FeedFormat.JSON, label: 'json 1.0', - url: VideoService.BASE_FEEDS_URL + FeedFormat.JSON.toLowerCase() + url: base + FeedFormat.JSON.toLowerCase() } ] @@ -274,6 +308,14 @@ export class VideoService implements VideosProvider { return this.buildBaseFeedUrls(params) } + getVideoSubscriptionFeedUrls (accountId: number, feedToken: string) { + let params = this.restService.addRestGetParams(new HttpParams()) + params = params.set('accountId', accountId.toString()) + params = params.set('token', feedToken) + + return this.buildBaseFeedUrls(params, VideoService.BASE_SUBSCRIPTION_FEEDS_URL) + } + getVideoFileMetadata (metadataUrl: string) { return this.authHttp .get(metadataUrl) @@ -336,7 +378,7 @@ export class VideoService implements VideosProvider { ) } - explainedPrivacyLabels (privacies: VideoConstant[]) { + explainedPrivacyLabels (privacies: VideoConstant[], defaultPrivacyId = VideoPrivacy.PUBLIC) { const base = [ { id: VideoPrivacy.PRIVATE, @@ -356,9 +398,14 @@ export class VideoService implements VideosProvider { } ] - return base + const videoPrivacies = base .filter(o => !!privacies.find(p => p.id === o.id)) // filter down to privacies that where in the input .map(o => ({ ...privacies[o.id - 1], ...o })) // merge the input privacies that contain a label, and extend them with a description + + return { + defaultPrivacyId: videoPrivacies.find(p => p.id === defaultPrivacyId)?.id || videoPrivacies[0].id, + videoPrivacies + } } nsfwPolicyToParam (nsfwPolicy: NSFWPolicyType) {