diff options
Diffstat (limited to 'server/controllers')
-rw-r--r-- | server/controllers/api/remote/videos.js | 74 | ||||
-rw-r--r-- | server/controllers/api/videos.js | 16 |
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 | ||
34 | router.post('/qadu', | ||
35 | signatureValidators.signature, | ||
36 | secureMiddleware.checkSignature, | ||
37 | videosValidators.remoteQaduVideos, | ||
38 | remoteVideosQadu | ||
39 | ) | ||
40 | |||
34 | // --------------------------------------------------------------------------- | 41 | // --------------------------------------------------------------------------- |
35 | 42 | ||
36 | module.exports = router | 43 | module.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 | ||
72 | function 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 | |||
87 | function 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 | |||
96 | function 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 |
66 | function addRemoteVideoRetryWrapper (videoToCreateData, fromPod, finalCallback) { | 140 | function 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 | ||
321 | function getVideo (req, res, next) { | 321 | function 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 | ||