aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'server/controllers')
-rw-r--r--server/controllers/api/remote/videos.js74
-rw-r--r--server/controllers/api/videos.js16
2 files changed, 90 insertions, 0 deletions
diff --git a/server/controllers/api/remote/videos.js b/server/controllers/api/remote/videos.js
index f8b4949cd..79b503d4d 100644
--- a/server/controllers/api/remote/videos.js
+++ b/server/controllers/api/remote/videos.js
@@ -31,6 +31,13 @@ router.post('/',
31 remoteVideos 31 remoteVideos
32) 32)
33 33
34router.post('/qadu',
35 signatureValidators.signature,
36 secureMiddleware.checkSignature,
37 videosValidators.remoteQaduVideos,
38 remoteVideosQadu
39)
40
34// --------------------------------------------------------------------------- 41// ---------------------------------------------------------------------------
35 42
36module.exports = router 43module.exports = router
@@ -62,6 +69,73 @@ function remoteVideos (req, res, next) {
62 return res.type('json').status(204).end() 69 return res.type('json').status(204).end()
63} 70}
64 71
72function remoteVideosQadu (req, res, next) {
73 const requests = req.body.data
74 const fromPod = res.locals.secure.pod
75
76 eachSeries(requests, function (request, callbackEach) {
77 const videoData = request.data
78
79 quickAndDirtyUpdateVideoRetryWrapper(videoData, fromPod, callbackEach)
80 }, function (err) {
81 if (err) logger.error('Error managing remote videos.', { error: err })
82 })
83
84 return res.type('json').status(204).end()
85}
86
87function quickAndDirtyUpdateVideoRetryWrapper (videoData, fromPod, finalCallback) {
88 const options = {
89 arguments: [ videoData, fromPod ],
90 errorMessage: 'Cannot update quick and dirty the remote video with many retries.'
91 }
92
93 databaseUtils.retryTransactionWrapper(quickAndDirtyUpdateVideo, options, finalCallback)
94}
95
96function quickAndDirtyUpdateVideo (videoData, fromPod, finalCallback) {
97 waterfall([
98 databaseUtils.startSerializableTransaction,
99
100 function findVideo (t, callback) {
101 fetchVideo(fromPod.host, videoData.remoteId, function (err, videoInstance) {
102 return callback(err, t, videoInstance)
103 })
104 },
105
106 function updateVideoIntoDB (t, videoInstance, callback) {
107 const options = { transaction: t }
108
109 if (videoData.views) {
110 videoInstance.set('views', videoData.views)
111 }
112
113 if (videoData.likes) {
114 videoInstance.set('likes', videoData.likes)
115 }
116
117 if (videoData.dislikes) {
118 videoInstance.set('dislikes', videoData.dislikes)
119 }
120
121 videoInstance.save(options).asCallback(function (err) {
122 return callback(err, t)
123 })
124 },
125
126 databaseUtils.commitTransaction
127
128 ], function (err, t) {
129 if (err) {
130 logger.debug('Cannot quick and dirty update the remote video.', { error: err })
131 return databaseUtils.rollbackTransaction(err, t, finalCallback)
132 }
133
134 logger.info('Remote video %s quick and dirty updated', videoData.name)
135 return finalCallback(null)
136 })
137}
138
65// Handle retries on fail 139// Handle retries on fail
66function addRemoteVideoRetryWrapper (videoToCreateData, fromPod, finalCallback) { 140function addRemoteVideoRetryWrapper (videoToCreateData, fromPod, finalCallback) {
67 const options = { 141 const options = {
diff --git a/server/controllers/api/videos.js b/server/controllers/api/videos.js
index c936105e7..9f4bbb7b7 100644
--- a/server/controllers/api/videos.js
+++ b/server/controllers/api/videos.js
@@ -320,6 +320,22 @@ function updateVideo (req, res, finalCallback) {
320 320
321function getVideo (req, res, next) { 321function getVideo (req, res, next) {
322 const videoInstance = res.locals.video 322 const videoInstance = res.locals.video
323
324 if (videoInstance.isOwned()) {
325 // The increment is done directly in the database, not using the instance value
326 videoInstance.increment('views').asCallback(function (err) {
327 if (err) {
328 logger.error('Cannot add view to video %d.', videoInstance.id)
329 return
330 }
331
332 // FIXME: make a real view system
333 // For example, only add a view when a user watch a video during 30s etc
334 friends.quickAndDirtyUpdateVideoToFriends(videoInstance.id, constants.REQUEST_VIDEO_QADU_TYPES.VIEWS)
335 })
336 }
337
338 // Do not wait the view system
323 res.json(videoInstance.toFormatedJSON()) 339 res.json(videoInstance.toFormatedJSON())
324} 340}
325 341