]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/shared/shared-search/search.service.ts
Add reset button for file inputs in studio page
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / shared-search / search.service.ts
CommitLineData
8cf43a65 1import { Observable, of } from 'rxjs'
f37dc0dd 2import { catchError, map, switchMap } from 'rxjs/operators'
57c36b27
C
3import { HttpClient, HttpParams } from '@angular/common/http'
4import { Injectable } from '@angular/core'
67ed6552 5import { ComponentPaginationLight, RestExtractor, RestPagination, RestService } from '@app/core'
67ed6552 6import { Video, VideoChannel, VideoChannelService, VideoService } from '@app/shared/shared-main'
37a44fc9
C
7import {
8 ResultList,
37a44fc9
C
9 Video as VideoServerModel,
10 VideoChannel as VideoChannelServerModel,
11 VideoPlaylist as VideoPlaylistServerModel
12} from '@shared/models'
1942f11d 13import { environment } from '../../../environments/environment'
37a44fc9 14import { VideoPlaylist, VideoPlaylistService } from '../shared-video-playlist'
1942f11d 15import { AdvancedSearch } from './advanced-search.model'
57c36b27
C
16
17@Injectable()
18export class SearchService {
19 static BASE_SEARCH_URL = environment.apiUrl + '/api/v1/search/'
20
21 constructor (
22 private authHttp: HttpClient,
23 private restExtractor: RestExtractor,
24 private restService: RestService,
37a44fc9
C
25 private videoService: VideoService,
26 private playlistService: VideoPlaylistService
a9bfa85d 27 ) { }
57c36b27 28
93cae479 29 searchVideos (parameters: {
3da38d6e 30 search?: string
af7fd04a 31 componentPagination?: ComponentPaginationLight
5fb2e288 32 advancedSearch?: AdvancedSearch
3da38d6e 33 uuids?: string[]
93cae479 34 }): Observable<ResultList<Video>> {
3da38d6e 35 const { search, uuids, componentPagination, advancedSearch } = parameters
57c36b27 36
82c082d9 37 if (advancedSearch?.resultType !== undefined && advancedSearch.resultType !== 'videos') {
8cf43a65
C
38 return of({ total: 0, data: [] })
39 }
40
93cae479 41 const url = SearchService.BASE_SEARCH_URL + 'videos'
5fb2e288
C
42 let pagination: RestPagination
43
44 if (componentPagination) {
4beda9e1 45 pagination = this.restService.componentToRestPagination(componentPagination)
5fb2e288 46 }
57c36b27
C
47
48 let params = new HttpParams()
49 params = this.restService.addRestGetParams(params, pagination)
4278710d
C
50
51 if (search) params = params.append('search', search)
3da38d6e 52 if (uuids) params = this.restService.addArrayParams(params, 'uuids', uuids)
57c36b27 53
5fb2e288 54 if (advancedSearch) {
af7fd04a 55 const advancedSearchObject = advancedSearch.toVideosAPIObject()
5fb2e288
C
56 params = this.restService.addObjectParams(params, advancedSearchObject)
57 }
0b18f4aa 58
57c36b27
C
59 return this.authHttp
60 .get<ResultList<VideoServerModel>>(url, { params })
61 .pipe(
62 switchMap(res => this.videoService.extractVideos(res)),
63 catchError(err => this.restExtractor.handleError(err))
64 )
65 }
f37dc0dd 66
93cae479 67 searchVideoChannels (parameters: {
3da38d6e 68 search?: string
af7fd04a 69 advancedSearch?: AdvancedSearch
5fb2e288 70 componentPagination?: ComponentPaginationLight
3da38d6e 71 handles?: string[]
93cae479 72 }): Observable<ResultList<VideoChannel>> {
3da38d6e 73 const { search, advancedSearch, componentPagination, handles } = parameters
f37dc0dd 74
82c082d9 75 if (advancedSearch?.resultType !== undefined && advancedSearch.resultType !== 'channels') {
8cf43a65
C
76 return of({ total: 0, data: [] })
77 }
78
93cae479 79 const url = SearchService.BASE_SEARCH_URL + 'video-channels'
5fb2e288
C
80
81 let pagination: RestPagination
82 if (componentPagination) {
4beda9e1 83 pagination = this.restService.componentToRestPagination(componentPagination)
5fb2e288 84 }
f37dc0dd
C
85
86 let params = new HttpParams()
87 params = this.restService.addRestGetParams(params, pagination)
916bf528
C
88
89 if (search) params = params.append('search', search)
3da38d6e 90 if (handles) params = this.restService.addArrayParams(params, 'handles', handles)
f37dc0dd 91
af7fd04a
C
92 if (advancedSearch) {
93 const advancedSearchObject = advancedSearch.toChannelAPIObject()
94 params = this.restService.addObjectParams(params, advancedSearchObject)
5fb2e288
C
95 }
96
f37dc0dd
C
97 return this.authHttp
98 .get<ResultList<VideoChannelServerModel>>(url, { params })
99 .pipe(
100 map(res => VideoChannelService.extractVideoChannels(res)),
101 catchError(err => this.restExtractor.handleError(err))
102 )
103 }
37a44fc9
C
104
105 searchVideoPlaylists (parameters: {
3da38d6e 106 search?: string
af7fd04a 107 advancedSearch?: AdvancedSearch
37a44fc9 108 componentPagination?: ComponentPaginationLight
3da38d6e 109 uuids?: string[]
37a44fc9 110 }): Observable<ResultList<VideoPlaylist>> {
3da38d6e 111 const { search, advancedSearch, componentPagination, uuids } = parameters
37a44fc9 112
82c082d9 113 if (advancedSearch?.resultType !== undefined && advancedSearch.resultType !== 'playlists') {
8cf43a65
C
114 return of({ total: 0, data: [] })
115 }
116
37a44fc9
C
117 const url = SearchService.BASE_SEARCH_URL + 'video-playlists'
118
119 let pagination: RestPagination
120 if (componentPagination) {
4beda9e1 121 pagination = this.restService.componentToRestPagination(componentPagination)
37a44fc9
C
122 }
123
124 let params = new HttpParams()
125 params = this.restService.addRestGetParams(params, pagination)
916bf528
C
126
127 if (search) params = params.append('search', search)
3da38d6e 128 if (uuids) params = this.restService.addArrayParams(params, 'uuids', uuids)
37a44fc9 129
af7fd04a
C
130 if (advancedSearch) {
131 const advancedSearchObject = advancedSearch.toPlaylistAPIObject()
132 params = this.restService.addObjectParams(params, advancedSearchObject)
37a44fc9
C
133 }
134
135 return this.authHttp
136 .get<ResultList<VideoPlaylistServerModel>>(url, { params })
137 .pipe(
138 switchMap(res => this.playlistService.extractPlaylists(res)),
139 catchError(err => this.restExtractor.handleError(err))
140 )
141 }
57c36b27 142}