diff options
Diffstat (limited to 'client/src/app/shared/video/video.service.ts')
-rw-r--r-- | client/src/app/shared/video/video.service.ts | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/client/src/app/shared/video/video.service.ts b/client/src/app/shared/video/video.service.ts index 3aaf14990..d66a1f809 100644 --- a/client/src/app/shared/video/video.service.ts +++ b/client/src/app/shared/video/video.service.ts | |||
@@ -39,8 +39,9 @@ export interface VideosProvider { | |||
39 | videoPagination: ComponentPaginationLight, | 39 | videoPagination: ComponentPaginationLight, |
40 | sort: VideoSortField, | 40 | sort: VideoSortField, |
41 | filter?: VideoFilter, | 41 | filter?: VideoFilter, |
42 | categoryOneOf?: number, | 42 | categoryOneOf?: number[], |
43 | languageOneOf?: string[] | 43 | languageOneOf?: string[] |
44 | nsfwPolicy: NSFWPolicyType | ||
44 | }): Observable<ResultList<Video>> | 45 | }): Observable<ResultList<Video>> |
45 | } | 46 | } |
46 | 47 | ||
@@ -161,13 +162,18 @@ export class VideoService implements VideosProvider { | |||
161 | getVideoChannelVideos ( | 162 | getVideoChannelVideos ( |
162 | videoChannel: VideoChannel, | 163 | videoChannel: VideoChannel, |
163 | videoPagination: ComponentPaginationLight, | 164 | videoPagination: ComponentPaginationLight, |
164 | sort: VideoSortField | 165 | sort: VideoSortField, |
166 | nsfwPolicy?: NSFWPolicyType | ||
165 | ): Observable<ResultList<Video>> { | 167 | ): Observable<ResultList<Video>> { |
166 | const pagination = this.restService.componentPaginationToRestPagination(videoPagination) | 168 | const pagination = this.restService.componentPaginationToRestPagination(videoPagination) |
167 | 169 | ||
168 | let params = new HttpParams() | 170 | let params = new HttpParams() |
169 | params = this.restService.addRestGetParams(params, pagination, sort) | 171 | params = this.restService.addRestGetParams(params, pagination, sort) |
170 | 172 | ||
173 | if (nsfwPolicy) { | ||
174 | params = params.set('nsfw', this.nsfwPolicyToParam(nsfwPolicy)) | ||
175 | } | ||
176 | |||
171 | return this.authHttp | 177 | return this.authHttp |
172 | .get<ResultList<Video>>(VideoChannelService.BASE_VIDEO_CHANNEL_URL + videoChannel.nameWithHost + '/videos', { params }) | 178 | .get<ResultList<Video>>(VideoChannelService.BASE_VIDEO_CHANNEL_URL + videoChannel.nameWithHost + '/videos', { params }) |
173 | .pipe( | 179 | .pipe( |
@@ -201,12 +207,12 @@ export class VideoService implements VideosProvider { | |||
201 | videoPagination: ComponentPaginationLight, | 207 | videoPagination: ComponentPaginationLight, |
202 | sort: VideoSortField, | 208 | sort: VideoSortField, |
203 | filter?: VideoFilter, | 209 | filter?: VideoFilter, |
204 | categoryOneOf?: number, | 210 | categoryOneOf?: number[], |
205 | languageOneOf?: string[], | 211 | languageOneOf?: string[], |
206 | skipCount?: boolean, | 212 | skipCount?: boolean, |
207 | nsfw?: boolean | 213 | nsfwPolicy?: NSFWPolicyType |
208 | }): Observable<ResultList<Video>> { | 214 | }): Observable<ResultList<Video>> { |
209 | const { videoPagination, sort, filter, categoryOneOf, languageOneOf, skipCount, nsfw } = parameters | 215 | const { videoPagination, sort, filter, categoryOneOf, languageOneOf, skipCount, nsfwPolicy } = parameters |
210 | 216 | ||
211 | const pagination = this.restService.componentPaginationToRestPagination(videoPagination) | 217 | const pagination = this.restService.componentPaginationToRestPagination(videoPagination) |
212 | 218 | ||
@@ -214,16 +220,10 @@ export class VideoService implements VideosProvider { | |||
214 | params = this.restService.addRestGetParams(params, pagination, sort) | 220 | params = this.restService.addRestGetParams(params, pagination, sort) |
215 | 221 | ||
216 | if (filter) params = params.set('filter', filter) | 222 | if (filter) params = params.set('filter', filter) |
217 | if (categoryOneOf) params = params.set('categoryOneOf', categoryOneOf + '') | ||
218 | if (skipCount) params = params.set('skipCount', skipCount + '') | 223 | if (skipCount) params = params.set('skipCount', skipCount + '') |
219 | 224 | ||
220 | if (nsfw) { | 225 | if (nsfwPolicy) { |
221 | params = params.set('nsfw', nsfw + '') | 226 | params = params.set('nsfw', this.nsfwPolicyToParam(nsfwPolicy)) |
222 | } else { | ||
223 | const nsfwPolicy = this.authService.isLoggedIn() | ||
224 | ? this.authService.getUser().nsfwPolicy | ||
225 | : this.userService.getAnonymousUser().nsfwPolicy | ||
226 | if (this.nsfwPolicyToFilter(nsfwPolicy)) params.set('nsfw', 'false') | ||
227 | } | 227 | } |
228 | 228 | ||
229 | if (languageOneOf) { | 229 | if (languageOneOf) { |
@@ -232,6 +232,12 @@ export class VideoService implements VideosProvider { | |||
232 | } | 232 | } |
233 | } | 233 | } |
234 | 234 | ||
235 | if (categoryOneOf) { | ||
236 | for (const c of categoryOneOf) { | ||
237 | params = params.append('categoryOneOf[]', c + '') | ||
238 | } | ||
239 | } | ||
240 | |||
235 | return this.authHttp | 241 | return this.authHttp |
236 | .get<ResultList<Video>>(VideoService.BASE_VIDEO_URL, { params }) | 242 | .get<ResultList<Video>>(VideoService.BASE_VIDEO_URL, { params }) |
237 | .pipe( | 243 | .pipe( |
@@ -268,12 +274,16 @@ export class VideoService implements VideosProvider { | |||
268 | return feeds | 274 | return feeds |
269 | } | 275 | } |
270 | 276 | ||
271 | getVideoFeedUrls (sort: VideoSortField, filter?: VideoFilter, categoryOneOf?: number) { | 277 | getVideoFeedUrls (sort: VideoSortField, filter?: VideoFilter, categoryOneOf?: number[]) { |
272 | let params = this.restService.addRestGetParams(new HttpParams(), undefined, sort) | 278 | let params = this.restService.addRestGetParams(new HttpParams(), undefined, sort) |
273 | 279 | ||
274 | if (filter) params = params.set('filter', filter) | 280 | if (filter) params = params.set('filter', filter) |
275 | 281 | ||
276 | if (categoryOneOf) params = params.set('categoryOneOf', categoryOneOf + '') | 282 | if (categoryOneOf) { |
283 | for (const c of categoryOneOf) { | ||
284 | params = params.append('categoryOneOf[]', c + '') | ||
285 | } | ||
286 | } | ||
277 | 287 | ||
278 | return this.buildBaseFeedUrls(params) | 288 | return this.buildBaseFeedUrls(params) |
279 | } | 289 | } |
@@ -377,6 +387,12 @@ export class VideoService implements VideosProvider { | |||
377 | return base.filter(o => !!privacies.find(p => p.id === o.id)) | 387 | return base.filter(o => !!privacies.find(p => p.id === o.id)) |
378 | } | 388 | } |
379 | 389 | ||
390 | nsfwPolicyToParam (nsfwPolicy: NSFWPolicyType) { | ||
391 | return nsfwPolicy === 'do_not_list' | ||
392 | ? 'false' | ||
393 | : 'both' | ||
394 | } | ||
395 | |||
380 | private setVideoRate (id: number, rateType: UserVideoRateType) { | 396 | private setVideoRate (id: number, rateType: UserVideoRateType) { |
381 | const url = VideoService.BASE_VIDEO_URL + id + '/rate' | 397 | const url = VideoService.BASE_VIDEO_URL + id + '/rate' |
382 | const body: UserVideoRateUpdate = { | 398 | const body: UserVideoRateUpdate = { |
@@ -390,8 +406,4 @@ export class VideoService implements VideosProvider { | |||
390 | catchError(err => this.restExtractor.handleError(err)) | 406 | catchError(err => this.restExtractor.handleError(err)) |
391 | ) | 407 | ) |
392 | } | 408 | } |
393 | |||
394 | private nsfwPolicyToFilter (policy: NSFWPolicyType) { | ||
395 | return policy === 'do_not_list' | ||
396 | } | ||
397 | } | 409 | } |