]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - controllers/api/v1/videos.js
4 var config
= require('config')
5 var crypto
= require('crypto')
6 var express
= require('express')
7 var multer
= require('multer')
9 var logger
= require('../../../helpers/logger')
10 var friends
= require('../../../lib/friends')
11 var middleware
= require('../../../middlewares')
12 var cacheMiddleware
= middleware
.cache
13 var reqValidator
= middleware
.reqValidators
.videos
14 var Videos
= require('../../../models/videos') // model
15 var videos
= require('../../../lib/videos')
16 var webtorrent
= require('../../../lib/webTorrentNode')
18 var router
= express
.Router()
19 var uploads
= config
.get('storage.uploads')
21 // multer configuration
22 var storage
= multer
.diskStorage({
23 destination: function (req
, file
, cb
) {
27 filename: function (req
, file
, cb
) {
29 if (file
.mimetype
=== 'video/webm') extension
= 'webm'
30 else if (file
.mimetype
=== 'video/mp4') extension
= 'mp4'
31 else if (file
.mimetype
=== 'video/ogg') extension
= 'ogv'
32 crypto
.pseudoRandomBytes(16, function (err
, raw
) {
33 var fieldname
= err
? undefined : raw
.toString('hex')
34 cb(null, fieldname
+ '.' + extension
)
39 var reqFiles
= multer({ storage: storage
}).fields([{ name: 'input_video', maxCount: 1 }])
41 router
.get('/', cacheMiddleware
.cache(false), listVideos
)
42 router
.post('/', reqFiles
, reqValidator
.videosAdd
, cacheMiddleware
.cache(false), addVideo
)
43 router
.get('/:id', reqValidator
.videosGet
, cacheMiddleware
.cache(false), getVideos
)
44 router
.delete('/:id', reqValidator
.videosRemove
, cacheMiddleware
.cache(false), removeVideo
)
45 router
.get('/search/:name', reqValidator
.videosSearch
, cacheMiddleware
.cache(false), searchVideos
)
47 // ---------------------------------------------------------------------------
49 module
.exports
= router
51 // ---------------------------------------------------------------------------
53 function addVideo (req
, res
, next
) {
54 var video_file
= req
.files
.input_video
[0]
55 var video_infos
= req
.body
57 videos
.seed(video_file
.path
, function (err
, torrent
) {
59 logger
.error('Cannot seed this video.', { error: err
})
64 name: video_infos
.name
,
65 namePath: video_file
.filename
,
66 description: video_infos
.description
,
67 magnetUri: torrent
.magnetURI
70 Videos
.add(video_data
, function (err
) {
72 // TODO unseed the video
73 logger
.error('Cannot insert this video in the database.', { error: err
})
77 // Now we'll add the video's meta data to our friends
78 friends
.addVideoToFriends(video_data
)
80 // TODO : include Location of the new video
86 function getVideos (req
, res
, next
) {
87 Videos
.get(req
.params
.id
, function (err
, video
) {
88 if (err
) return next(err
)
91 return res
.sendStatus(404)
98 function listVideos (req
, res
, next
) {
99 Videos
.list(function (err
, videos_list
) {
100 if (err
) return next(err
)
102 res
.json(videos_list
)
106 function removeVideo (req
, res
, next
) {
107 var video_id
= req
.params
.id
108 Videos
.get(video_id
, function (err
, video
) {
109 if (err
) return next(err
)
111 removeTorrent(video
.magnetUri
, function () {
112 Videos
.removeOwned(req
.params
.id
, function (err
) {
113 if (err
) return next(err
)
117 magnetUri: video
.magnetUri
120 friends
.removeVideoToFriends(params
)
127 function searchVideos (req
, res
, next
) {
128 Videos
.search(req
.params
.name
, function (err
, videos_list
) {
129 if (err
) return next(err
)
131 res
.json(videos_list
)
135 // ---------------------------------------------------------------------------
137 // Maybe the torrent is not seeded, but we catch the error to don't stop the removing process
138 function removeTorrent (magnetUri
, callback
) {
140 webtorrent
.remove(magnetUri
, callback
)
142 logger
.warn('Cannot remove the torrent from WebTorrent', { err: err
})
143 return callback(null)