mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			319 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			319 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import { makeDeleteRequest, makeGetRequest, makePostBodyRequest, makePutBodyRequest, makeUploadRequest } from '../requests/requests'
 | |
| import { VideoPlaylistCreate } from '../../models/videos/playlist/video-playlist-create.model'
 | |
| import { omit } from 'lodash'
 | |
| import { VideoPlaylistUpdate } from '../../models/videos/playlist/video-playlist-update.model'
 | |
| import { VideoPlaylistElementCreate } from '../../models/videos/playlist/video-playlist-element-create.model'
 | |
| import { VideoPlaylistElementUpdate } from '../../models/videos/playlist/video-playlist-element-update.model'
 | |
| import { videoUUIDToId } from './videos'
 | |
| import { join } from 'path'
 | |
| import { root } from '..'
 | |
| import { readdir } from 'fs-extra'
 | |
| import { expect } from 'chai'
 | |
| import { VideoPlaylistType } from '../../models/videos/playlist/video-playlist-type.model'
 | |
| 
 | |
| function getVideoPlaylistsList (url: string, start: number, count: number, sort?: string) {
 | |
|   const path = '/api/v1/video-playlists'
 | |
| 
 | |
|   const query = {
 | |
|     start,
 | |
|     count,
 | |
|     sort
 | |
|   }
 | |
| 
 | |
|   return makeGetRequest({
 | |
|     url,
 | |
|     path,
 | |
|     query,
 | |
|     statusCodeExpected: 200
 | |
|   })
 | |
| }
 | |
| 
 | |
| function getVideoChannelPlaylistsList (url: string, videoChannelName: string, start: number, count: number, sort?: string) {
 | |
|   const path = '/api/v1/video-channels/' + videoChannelName + '/video-playlists'
 | |
| 
 | |
|   const query = {
 | |
|     start,
 | |
|     count,
 | |
|     sort
 | |
|   }
 | |
| 
 | |
|   return makeGetRequest({
 | |
|     url,
 | |
|     path,
 | |
|     query,
 | |
|     statusCodeExpected: 200
 | |
|   })
 | |
| }
 | |
| 
 | |
| function getAccountPlaylistsList (url: string, accountName: string, start: number, count: number, sort?: string) {
 | |
|   const path = '/api/v1/accounts/' + accountName + '/video-playlists'
 | |
| 
 | |
|   const query = {
 | |
|     start,
 | |
|     count,
 | |
|     sort
 | |
|   }
 | |
| 
 | |
|   return makeGetRequest({
 | |
|     url,
 | |
|     path,
 | |
|     query,
 | |
|     statusCodeExpected: 200
 | |
|   })
 | |
| }
 | |
| 
 | |
| function getAccountPlaylistsListWithToken (
 | |
|   url: string,
 | |
|   token: string,
 | |
|   accountName: string,
 | |
|   start: number,
 | |
|   count: number,
 | |
|   playlistType?: VideoPlaylistType,
 | |
|   sort?: string
 | |
| ) {
 | |
|   const path = '/api/v1/accounts/' + accountName + '/video-playlists'
 | |
| 
 | |
|   const query = {
 | |
|     start,
 | |
|     count,
 | |
|     playlistType,
 | |
|     sort
 | |
|   }
 | |
| 
 | |
|   return makeGetRequest({
 | |
|     url,
 | |
|     token,
 | |
|     path,
 | |
|     query,
 | |
|     statusCodeExpected: 200
 | |
|   })
 | |
| }
 | |
| 
 | |
| function getVideoPlaylist (url: string, playlistId: number | string, statusCodeExpected = 200) {
 | |
|   const path = '/api/v1/video-playlists/' + playlistId
 | |
| 
 | |
|   return makeGetRequest({
 | |
|     url,
 | |
|     path,
 | |
|     statusCodeExpected
 | |
|   })
 | |
| }
 | |
| 
 | |
| function getVideoPlaylistWithToken (url: string, token: string, playlistId: number | string, statusCodeExpected = 200) {
 | |
|   const path = '/api/v1/video-playlists/' + playlistId
 | |
| 
 | |
|   return makeGetRequest({
 | |
|     url,
 | |
|     token,
 | |
|     path,
 | |
|     statusCodeExpected
 | |
|   })
 | |
| }
 | |
| 
 | |
| function deleteVideoPlaylist (url: string, token: string, playlistId: number | string, statusCodeExpected = 204) {
 | |
|   const path = '/api/v1/video-playlists/' + playlistId
 | |
| 
 | |
|   return makeDeleteRequest({
 | |
|     url,
 | |
|     path,
 | |
|     token,
 | |
|     statusCodeExpected
 | |
|   })
 | |
| }
 | |
| 
 | |
| function createVideoPlaylist (options: {
 | |
|   url: string,
 | |
|   token: string,
 | |
|   playlistAttrs: VideoPlaylistCreate,
 | |
|   expectedStatus?: number
 | |
| }) {
 | |
|   const path = '/api/v1/video-playlists'
 | |
| 
 | |
|   const fields = omit(options.playlistAttrs, 'thumbnailfile')
 | |
| 
 | |
|   const attaches = options.playlistAttrs.thumbnailfile
 | |
|     ? { thumbnailfile: options.playlistAttrs.thumbnailfile }
 | |
|     : {}
 | |
| 
 | |
|   return makeUploadRequest({
 | |
|     method: 'POST',
 | |
|     url: options.url,
 | |
|     path,
 | |
|     token: options.token,
 | |
|     fields,
 | |
|     attaches,
 | |
|     statusCodeExpected: options.expectedStatus || 200
 | |
|   })
 | |
| }
 | |
| 
 | |
| function updateVideoPlaylist (options: {
 | |
|   url: string,
 | |
|   token: string,
 | |
|   playlistAttrs: VideoPlaylistUpdate,
 | |
|   playlistId: number | string,
 | |
|   expectedStatus?: number
 | |
| }) {
 | |
|   const path = '/api/v1/video-playlists/' + options.playlistId
 | |
| 
 | |
|   const fields = omit(options.playlistAttrs, 'thumbnailfile')
 | |
| 
 | |
|   const attaches = options.playlistAttrs.thumbnailfile
 | |
|     ? { thumbnailfile: options.playlistAttrs.thumbnailfile }
 | |
|     : {}
 | |
| 
 | |
|   return makeUploadRequest({
 | |
|     method: 'PUT',
 | |
|     url: options.url,
 | |
|     path,
 | |
|     token: options.token,
 | |
|     fields,
 | |
|     attaches,
 | |
|     statusCodeExpected: options.expectedStatus || 204
 | |
|   })
 | |
| }
 | |
| 
 | |
| async function addVideoInPlaylist (options: {
 | |
|   url: string,
 | |
|   token: string,
 | |
|   playlistId: number | string,
 | |
|   elementAttrs: VideoPlaylistElementCreate | { videoId: string }
 | |
|   expectedStatus?: number
 | |
| }) {
 | |
|   options.elementAttrs.videoId = await videoUUIDToId(options.url, options.elementAttrs.videoId)
 | |
| 
 | |
|   const path = '/api/v1/video-playlists/' + options.playlistId + '/videos'
 | |
| 
 | |
|   return makePostBodyRequest({
 | |
|     url: options.url,
 | |
|     path,
 | |
|     token: options.token,
 | |
|     fields: options.elementAttrs,
 | |
|     statusCodeExpected: options.expectedStatus || 200
 | |
|   })
 | |
| }
 | |
| 
 | |
| function updateVideoPlaylistElement (options: {
 | |
|   url: string,
 | |
|   token: string,
 | |
|   playlistId: number | string,
 | |
|   videoId: number | string,
 | |
|   elementAttrs: VideoPlaylistElementUpdate,
 | |
|   expectedStatus?: number
 | |
| }) {
 | |
|   const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/' + options.videoId
 | |
| 
 | |
|   return makePutBodyRequest({
 | |
|     url: options.url,
 | |
|     path,
 | |
|     token: options.token,
 | |
|     fields: options.elementAttrs,
 | |
|     statusCodeExpected: options.expectedStatus || 204
 | |
|   })
 | |
| }
 | |
| 
 | |
| function removeVideoFromPlaylist (options: {
 | |
|   url: string,
 | |
|   token: string,
 | |
|   playlistId: number | string,
 | |
|   videoId: number | string,
 | |
|   expectedStatus?: number
 | |
| }) {
 | |
|   const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/' + options.videoId
 | |
| 
 | |
|   return makeDeleteRequest({
 | |
|     url: options.url,
 | |
|     path,
 | |
|     token: options.token,
 | |
|     statusCodeExpected: options.expectedStatus || 204
 | |
|   })
 | |
| }
 | |
| 
 | |
| function reorderVideosPlaylist (options: {
 | |
|   url: string,
 | |
|   token: string,
 | |
|   playlistId: number | string,
 | |
|   elementAttrs: {
 | |
|     startPosition: number,
 | |
|     insertAfterPosition: number,
 | |
|     reorderLength?: number
 | |
|   },
 | |
|   expectedStatus?: number
 | |
| }) {
 | |
|   const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/reorder'
 | |
| 
 | |
|   return makePostBodyRequest({
 | |
|     url: options.url,
 | |
|     path,
 | |
|     token: options.token,
 | |
|     fields: options.elementAttrs,
 | |
|     statusCodeExpected: options.expectedStatus || 204
 | |
|   })
 | |
| }
 | |
| 
 | |
| async function checkPlaylistFilesWereRemoved (
 | |
|   playlistUUID: string,
 | |
|   serverNumber: number,
 | |
|   directories = [ 'thumbnails' ]
 | |
| ) {
 | |
|   const testDirectory = 'test' + serverNumber
 | |
| 
 | |
|   for (const directory of directories) {
 | |
|     const directoryPath = join(root(), testDirectory, directory)
 | |
| 
 | |
|     const files = await readdir(directoryPath)
 | |
|     for (const file of files) {
 | |
|       expect(file).to.not.contain(playlistUUID)
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| function getVideoPlaylistPrivacies (url: string) {
 | |
|   const path = '/api/v1/video-playlists/privacies'
 | |
| 
 | |
|   return makeGetRequest({
 | |
|     url,
 | |
|     path,
 | |
|     statusCodeExpected: 200
 | |
|   })
 | |
| }
 | |
| 
 | |
| function doVideosExistInMyPlaylist (url: string, token: string, videoIds: number[]) {
 | |
|   const path = '/api/v1/users/me/video-playlists/videos-exist'
 | |
| 
 | |
|   return makeGetRequest({
 | |
|     url,
 | |
|     token,
 | |
|     path,
 | |
|     query: { videoIds },
 | |
|     statusCodeExpected: 200
 | |
|   })
 | |
| }
 | |
| 
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| export {
 | |
|   getVideoPlaylistPrivacies,
 | |
| 
 | |
|   getVideoPlaylistsList,
 | |
|   getVideoChannelPlaylistsList,
 | |
|   getAccountPlaylistsList,
 | |
|   getAccountPlaylistsListWithToken,
 | |
| 
 | |
|   getVideoPlaylist,
 | |
|   getVideoPlaylistWithToken,
 | |
| 
 | |
|   createVideoPlaylist,
 | |
|   updateVideoPlaylist,
 | |
|   deleteVideoPlaylist,
 | |
| 
 | |
|   addVideoInPlaylist,
 | |
|   updateVideoPlaylistElement,
 | |
|   removeVideoFromPlaylist,
 | |
| 
 | |
|   reorderVideosPlaylist,
 | |
| 
 | |
|   checkPlaylistFilesWereRemoved,
 | |
| 
 | |
|   doVideosExistInMyPlaylist
 | |
| }
 |