]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - shared/utils/videos/video-playlists.ts
Add playlist check param tests
[github/Chocobozzz/PeerTube.git] / shared / utils / videos / video-playlists.ts
1 import { makeDeleteRequest, makeGetRequest, makePostBodyRequest, makePutBodyRequest, makeUploadRequest } from '../requests/requests'
2 import { VideoPlaylistCreate } from '../../models/videos/playlist/video-playlist-create.model'
3 import { omit } from 'lodash'
4 import { VideoPlaylistUpdate } from '../../models/videos/playlist/video-playlist-update.model'
5 import { VideoPlaylistElementCreate } from '../../models/videos/playlist/video-playlist-element-create.model'
6 import { VideoPlaylistElementUpdate } from '../../models/videos/playlist/video-playlist-element-update.model'
7
8 function getVideoPlaylistsList (url: string, start: number, count: number, sort?: string) {
9 const path = '/api/v1/video-playlists'
10
11 const query = {
12 start,
13 count,
14 sort
15 }
16
17 return makeGetRequest({
18 url,
19 path,
20 query
21 })
22 }
23
24 function getVideoPlaylist (url: string, playlistId: number | string, statusCodeExpected = 200) {
25 const path = '/api/v1/video-playlists/' + playlistId
26
27 return makeGetRequest({
28 url,
29 path,
30 statusCodeExpected
31 })
32 }
33
34 function deleteVideoPlaylist (url: string, token: string, playlistId: number | string, statusCodeExpected = 204) {
35 const path = '/api/v1/video-playlists/' + playlistId
36
37 return makeDeleteRequest({
38 url,
39 path,
40 token,
41 statusCodeExpected
42 })
43 }
44
45 function createVideoPlaylist (options: {
46 url: string,
47 token: string,
48 playlistAttrs: VideoPlaylistCreate,
49 expectedStatus?: number
50 }) {
51 const path = '/api/v1/video-playlists/'
52
53 const fields = omit(options.playlistAttrs, 'thumbnailfile')
54
55 const attaches = options.playlistAttrs.thumbnailfile
56 ? { thumbnailfile: options.playlistAttrs.thumbnailfile }
57 : {}
58
59 return makeUploadRequest({
60 method: 'POST',
61 url: options.url,
62 path,
63 token: options.token,
64 fields,
65 attaches,
66 statusCodeExpected: options.expectedStatus || 200
67 })
68 }
69
70 function updateVideoPlaylist (options: {
71 url: string,
72 token: string,
73 playlistAttrs: VideoPlaylistUpdate,
74 playlistId: number | string,
75 expectedStatus?: number
76 }) {
77 const path = '/api/v1/video-playlists/' + options.playlistId
78
79 const fields = omit(options.playlistAttrs, 'thumbnailfile')
80
81 const attaches = options.playlistAttrs.thumbnailfile
82 ? { thumbnailfile: options.playlistAttrs.thumbnailfile }
83 : {}
84
85 return makeUploadRequest({
86 method: 'PUT',
87 url: options.url,
88 path,
89 token: options.token,
90 fields,
91 attaches,
92 statusCodeExpected: options.expectedStatus || 204
93 })
94 }
95
96 function addVideoInPlaylist (options: {
97 url: string,
98 token: string,
99 playlistId: number | string,
100 elementAttrs: VideoPlaylistElementCreate
101 expectedStatus?: number
102 }) {
103 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos'
104
105 return makePostBodyRequest({
106 url: options.url,
107 path,
108 token: options.token,
109 fields: options.elementAttrs,
110 statusCodeExpected: options.expectedStatus || 200
111 })
112 }
113
114 function updateVideoPlaylistElement (options: {
115 url: string,
116 token: string,
117 playlistId: number | string,
118 videoId: number | string,
119 elementAttrs: VideoPlaylistElementUpdate,
120 expectedStatus?: number
121 }) {
122 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/' + options.videoId
123
124 return makePutBodyRequest({
125 url: options.url,
126 path,
127 token: options.token,
128 fields: options.elementAttrs,
129 statusCodeExpected: options.expectedStatus || 204
130 })
131 }
132
133 function removeVideoFromPlaylist (options: {
134 url: string,
135 token: string,
136 playlistId: number | string,
137 videoId: number | string,
138 expectedStatus: number
139 }) {
140 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/' + options.videoId
141
142 return makeDeleteRequest({
143 url: options.url,
144 path,
145 token: options.token,
146 statusCodeExpected: options.expectedStatus || 204
147 })
148 }
149
150 function reorderVideosPlaylist (options: {
151 url: string,
152 token: string,
153 playlistId: number | string,
154 elementAttrs: {
155 startPosition: number,
156 insertAfterPosition: number,
157 reorderLength?: number
158 },
159 expectedStatus: number
160 }) {
161 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/reorder'
162
163 return makePostBodyRequest({
164 url: options.url,
165 path,
166 token: options.token,
167 fields: options.elementAttrs,
168 statusCodeExpected: options.expectedStatus
169 })
170 }
171
172 // ---------------------------------------------------------------------------
173
174 export {
175 getVideoPlaylistsList,
176 getVideoPlaylist,
177
178 createVideoPlaylist,
179 updateVideoPlaylist,
180 deleteVideoPlaylist,
181
182 addVideoInPlaylist,
183 updateVideoPlaylistElement,
184 removeVideoFromPlaylist,
185
186 reorderVideosPlaylist
187 }