]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - controllers/api/v1/videos.js
3 var config
= require('config')
4 var crypto
= require('crypto')
5 var express
= require('express')
6 var multer
= require('multer')
8 var logger
= require('../../../helpers/logger')
9 var friends
= require('../../../lib/friends')
10 var middleware
= require('../../../middlewares')
11 var cacheMiddleware
= middleware
.cache
12 var reqValidator
= middleware
.reqValidators
.videos
13 var Videos
= require('../../../models/videos') // model
14 var videos
= require('../../../lib/videos')
15 var webtorrent
= require('../../../lib/webtorrent')
17 var router
= express
.Router()
18 var uploads
= config
.get('storage.uploads')
20 // multer configuration
21 var storage
= multer
.diskStorage({
22 destination: function (req
, file
, cb
) {
26 filename: function (req
, file
, cb
) {
28 if (file
.mimetype
=== 'video/webm') extension
= 'webm'
29 else if (file
.mimetype
=== 'video/mp4') extension
= 'mp4'
30 else if (file
.mimetype
=== 'video/ogg') extension
= 'ogv'
31 crypto
.pseudoRandomBytes(16, function (err
, raw
) {
32 var fieldname
= err
? undefined : raw
.toString('hex')
33 cb(null, fieldname
+ '.' + extension
)
38 var reqFiles
= multer({ storage: storage
}).fields([{ name: 'input_video', maxCount: 1 }])
40 router
.get('/', cacheMiddleware
.cache(false), listVideos
)
41 router
.post('/', reqFiles
, reqValidator
.videosAdd
, cacheMiddleware
.cache(false), addVideo
)
42 router
.get('/:id', reqValidator
.videosGet
, cacheMiddleware
.cache(false), getVideos
)
43 router
.delete('/:id', reqValidator
.videosRemove
, cacheMiddleware
.cache(false), removeVideo
)
44 router
.get('/search/:name', reqValidator
.videosSearch
, cacheMiddleware
.cache(false), searchVideos
)
46 // ---------------------------------------------------------------------------
48 module
.exports
= router
50 // ---------------------------------------------------------------------------
52 function addVideo (req
, res
, next
) {
53 var video_file
= req
.files
.input_video
[0]
54 var video_infos
= req
.body
56 videos
.seed(video_file
.path
, function (err
, torrent
) {
58 logger
.error('Cannot seed this video.')
63 name: video_infos
.name
,
64 namePath: video_file
.filename
,
65 description: video_infos
.description
,
66 magnetUri: torrent
.magnetURI
69 Videos
.add(video_data
, function (err
) {
71 // TODO unseed the video
72 logger
.error('Cannot insert this video in the database.')
76 // Now we'll add the video's meta data to our friends
77 friends
.addVideoToFriends(video_data
)
79 // TODO : include Location of the new video
85 function getVideos (req
, res
, next
) {
86 Videos
.get(req
.params
.id
, function (err
, video
) {
87 if (err
) return next(err
)
90 return res
.sendStatus(404)
97 function listVideos (req
, res
, next
) {
98 Videos
.list(function (err
, videos_list
) {
99 if (err
) return next(err
)
101 res
.json(videos_list
)
105 function removeVideo (req
, res
, next
) {
106 var video_id
= req
.params
.id
107 Videos
.get(video_id
, function (err
, video
) {
108 if (err
) return next(err
)
110 removeTorrent(video
.magnetUri
, function () {
111 Videos
.removeOwned(req
.params
.id
, function (err
) {
112 if (err
) return next(err
)
116 magnetUri: video
.magnetUri
119 friends
.removeVideoToFriends(params
)
126 function searchVideos (req
, res
, next
) {
127 Videos
.search(req
.params
.name
, function (err
, videos_list
) {
128 if (err
) return next(err
)
130 res
.json(videos_list
)
134 // ---------------------------------------------------------------------------
136 // Maybe the torrent is not seeded, but we catch the error to don't stop the removing process
137 function removeTorrent (magnetUri
, callback
) {
139 webtorrent
.remove(magnetUri
, callback
)
141 logger
.warn('Cannot remove the torrent from WebTorrent', { err: err
})
142 return callback(null)