aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/app/+admin/overview/videos/video-admin.service.ts
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2021-11-02 14:14:26 +0100
committerChocobozzz <me@florianbigard.com>2021-11-02 14:14:26 +0100
commit05ac4ac7ed5107ac8ef1d0d1f9fd5009bf29bedc (patch)
tree7607cfb6856c279b50f38e92d9060ee687719409 /client/src/app/+admin/overview/videos/video-admin.service.ts
parent047f9585dd91d7765d78522edebfb64107450512 (diff)
downloadPeerTube-05ac4ac7ed5107ac8ef1d0d1f9fd5009bf29bedc.tar.gz
PeerTube-05ac4ac7ed5107ac8ef1d0d1f9fd5009bf29bedc.tar.zst
PeerTube-05ac4ac7ed5107ac8ef1d0d1f9fd5009bf29bedc.zip
Move admin stuff in +admin
Diffstat (limited to 'client/src/app/+admin/overview/videos/video-admin.service.ts')
-rw-r--r--client/src/app/+admin/overview/videos/video-admin.service.ts97
1 files changed, 97 insertions, 0 deletions
diff --git a/client/src/app/+admin/overview/videos/video-admin.service.ts b/client/src/app/+admin/overview/videos/video-admin.service.ts
new file mode 100644
index 000000000..696609cb2
--- /dev/null
+++ b/client/src/app/+admin/overview/videos/video-admin.service.ts
@@ -0,0 +1,97 @@
1import { Observable } from 'rxjs'
2import { catchError, switchMap } from 'rxjs/operators'
3import { HttpClient, HttpParams } from '@angular/common/http'
4import { Injectable } from '@angular/core'
5import { RestExtractor, RestPagination, RestService } from '@app/core'
6import { AdvancedInputFilter } from '@app/shared/shared-forms'
7import { CommonVideoParams, Video, VideoService } from '@app/shared/shared-main'
8import { ResultList, VideoInclude } from '@shared/models'
9
10@Injectable()
11export class VideoAdminService {
12
13 constructor (
14 private videoService: VideoService,
15 private authHttp: HttpClient,
16 private restExtractor: RestExtractor,
17 private restService: RestService
18 ) {}
19
20 getAdminVideos (
21 options: CommonVideoParams & { pagination: RestPagination, search?: string }
22 ): Observable<ResultList<Video>> {
23 const { pagination, search } = options
24
25 let params = new HttpParams()
26 params = this.videoService.buildCommonVideosParams({ params, ...options })
27
28 params = params.set('start', pagination.start.toString())
29 .set('count', pagination.count.toString())
30
31 params = this.buildAdminParamsFromSearch(search, params)
32
33 return this.authHttp
34 .get<ResultList<Video>>(VideoService.BASE_VIDEO_URL, { params })
35 .pipe(
36 switchMap(res => this.videoService.extractVideos(res)),
37 catchError(err => this.restExtractor.handleError(err))
38 )
39 }
40
41 buildAdminInputFilter (): AdvancedInputFilter[] {
42 return [
43 {
44 title: $localize`Videos scope`,
45 children: [
46 {
47 queryParams: { search: 'isLocal:false' },
48 label: $localize`Remote videos`
49 },
50 {
51 queryParams: { search: 'isLocal:true' },
52 label: $localize`Local videos`
53 }
54 ]
55 },
56
57 {
58 title: $localize`Include/Exclude`,
59 children: [
60 {
61 queryParams: { search: 'excludeMuted' },
62 label: $localize`Exclude muted accounts`
63 }
64 ]
65 }
66 ]
67 }
68
69 private buildAdminParamsFromSearch (search: string, params: HttpParams) {
70 let include = VideoInclude.BLACKLISTED |
71 VideoInclude.BLOCKED_OWNER |
72 VideoInclude.HIDDEN_PRIVACY |
73 VideoInclude.NOT_PUBLISHED_STATE |
74 VideoInclude.FILES
75
76 if (!search) return this.restService.addObjectParams(params, { include })
77
78 const filters = this.restService.parseQueryStringFilter(search, {
79 isLocal: {
80 prefix: 'isLocal:',
81 isBoolean: true
82 },
83 excludeMuted: {
84 prefix: 'excludeMuted',
85 handler: () => true
86 }
87 })
88
89 if (filters.excludeMuted) {
90 include &= ~VideoInclude.BLOCKED_OWNER
91
92 filters.excludeMuted = undefined
93 }
94
95 return this.restService.addObjectParams(params, { ...filters, include })
96 }
97}