]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/shared/video-blacklist/video-blacklist.service.ts
Fix auto blacklist view
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / video-blacklist / video-blacklist.service.ts
CommitLineData
7ccddd7b 1import { catchError, map, concatMap, toArray } from 'rxjs/operators'
792dbaf0 2import { HttpClient, HttpParams } from '@angular/common/http'
63c4db6d
C
3import { Injectable } from '@angular/core'
4import { SortMeta } from 'primeng/components/common/sortmeta'
7ccddd7b
JM
5import { from as observableFrom, Observable } from 'rxjs'
6import { VideoBlacklist, VideoBlacklistType, ResultList } from '../../../../../shared'
7import { Video } from '../video/video.model'
63c4db6d 8import { environment } from '../../../environments/environment'
35bf0c83 9import { RestExtractor, RestPagination, RestService } from '../rest'
7ccddd7b 10import { ComponentPagination } from '../rest/component-pagination.model'
792dbaf0
GS
11
12@Injectable()
35bf0c83 13export class VideoBlacklistService {
63c4db6d 14 private static BASE_VIDEOS_URL = environment.apiUrl + '/api/v1/videos/'
792dbaf0
GS
15
16 constructor (
17 private authHttp: HttpClient,
18 private restService: RestService,
19 private restExtractor: RestExtractor
20 ) {}
21
7ccddd7b 22 listBlacklist (pagination: RestPagination, sort: SortMeta, type?: VideoBlacklistType): Observable<ResultList<VideoBlacklist>> {
792dbaf0
GS
23 let params = new HttpParams()
24 params = this.restService.addRestGetParams(params, pagination, sort)
25
7ccddd7b
JM
26 if (type) {
27 params = params.set('type', type.toString())
28 }
29
191764f3 30 return this.authHttp.get<ResultList<VideoBlacklist>>(VideoBlacklistService.BASE_VIDEOS_URL + 'blacklist', { params })
db400f44
C
31 .pipe(
32 map(res => this.restExtractor.convertResultListDateToHuman(res)),
33 catchError(res => this.restExtractor.handleError(res))
34 )
792dbaf0
GS
35 }
36
dedc7abb 37 getAutoBlacklistedAsVideoList (videoPagination: ComponentPagination): Observable<ResultList<Video>> {
7ccddd7b
JM
38 const pagination = this.restService.componentPaginationToRestPagination(videoPagination)
39
40 // prioritize first created since waiting longest
41 const AUTO_BLACKLIST_SORT = 'createdAt'
42
43 let params = new HttpParams()
44 params = this.restService.addRestGetParams(params, pagination, AUTO_BLACKLIST_SORT)
45
46 params = params.set('type', VideoBlacklistType.AUTO_BEFORE_PUBLISHED.toString())
47
48 return this.authHttp.get<ResultList<VideoBlacklist>>(VideoBlacklistService.BASE_VIDEOS_URL + 'blacklist', { params })
49 .pipe(
50 map(res => {
dedc7abb
C
51 return {
52 total: res.total,
53 data: res.data.map(videoBlacklist => new Video(videoBlacklist.video))
54 }
7ccddd7b
JM
55 }),
56 catchError(res => this.restExtractor.handleError(res))
57 )
58 }
59
60 removeVideoFromBlacklist (videoIdArgs: number | number[]) {
61 const videoIds = Array.isArray(videoIdArgs) ? videoIdArgs : [ videoIdArgs ]
62
63 return observableFrom(videoIds)
64 .pipe(
65 concatMap(id => this.authHttp.delete(VideoBlacklistService.BASE_VIDEOS_URL + id + '/blacklist')),
66 toArray(),
67 catchError(err => this.restExtractor.handleError(err))
68 )
792dbaf0
GS
69 }
70
5abb9fbb
C
71 blacklistVideo (videoId: number, reason: string, unfederate: boolean) {
72 const body = {
73 unfederate,
74 reason
75 }
26b7305a
C
76
77 return this.authHttp.post(VideoBlacklistService.BASE_VIDEOS_URL + videoId + '/blacklist', body)
db400f44
C
78 .pipe(
79 map(this.restExtractor.extractDataBool),
80 catchError(res => this.restExtractor.handleError(res))
81 )
35bf0c83 82 }
792dbaf0 83}