diff options
author | Chocobozzz <florian.bigard@gmail.com> | 2017-11-30 09:21:11 +0100 |
---|---|---|
committer | Chocobozzz <florian.bigard@gmail.com> | 2017-11-30 09:21:11 +0100 |
commit | 1f3e9feca2caf68024168b0ea9ed39d8438fa235 (patch) | |
tree | b77b02d11796cf435496fd22b85c430a7ed2479f /server/controllers/api/videos/index.ts | |
parent | 86d13ec2aa94ec10810ddf9c8b33314bd4968791 (diff) | |
download | PeerTube-1f3e9feca2caf68024168b0ea9ed39d8438fa235.tar.gz PeerTube-1f3e9feca2caf68024168b0ea9ed39d8438fa235.tar.zst PeerTube-1f3e9feca2caf68024168b0ea9ed39d8438fa235.zip |
Better view counter
Diffstat (limited to 'server/controllers/api/videos/index.ts')
-rw-r--r-- | server/controllers/api/videos/index.ts | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts index 244d91914..e2798830e 100644 --- a/server/controllers/api/videos/index.ts +++ b/server/controllers/api/videos/index.ts | |||
@@ -104,6 +104,10 @@ videosRouter.get('/:id', | |||
104 | asyncMiddleware(videosGetValidator), | 104 | asyncMiddleware(videosGetValidator), |
105 | getVideo | 105 | getVideo |
106 | ) | 106 | ) |
107 | videosRouter.post('/:id/views', | ||
108 | asyncMiddleware(videosGetValidator), | ||
109 | asyncMiddleware(viewVideo) | ||
110 | ) | ||
107 | 111 | ||
108 | videosRouter.delete('/:id', | 112 | videosRouter.delete('/:id', |
109 | authenticate, | 113 | authenticate, |
@@ -311,25 +315,25 @@ async function updateVideo (req: express.Request, res: express.Response) { | |||
311 | } | 315 | } |
312 | } | 316 | } |
313 | 317 | ||
314 | async function getVideo (req: express.Request, res: express.Response) { | 318 | function getVideo (req: express.Request, res: express.Response) { |
319 | const videoInstance = res.locals.video | ||
320 | |||
321 | return res.json(videoInstance.toFormattedDetailsJSON()) | ||
322 | } | ||
323 | |||
324 | async function viewVideo (req: express.Request, res: express.Response) { | ||
315 | const videoInstance = res.locals.video | 325 | const videoInstance = res.locals.video |
316 | 326 | ||
317 | const baseIncrementPromise = videoInstance.increment('views') | 327 | await videoInstance.increment('views') |
318 | .then(() => getServerAccount()) | 328 | const serverAccount = await getServerAccount() |
319 | 329 | ||
320 | if (videoInstance.isOwned()) { | 330 | if (videoInstance.isOwned()) { |
321 | // The increment is done directly in the database, not using the instance value | 331 | await sendCreateViewToVideoFollowers(serverAccount, videoInstance, undefined) |
322 | baseIncrementPromise | ||
323 | .then(serverAccount => sendCreateViewToVideoFollowers(serverAccount, videoInstance, undefined)) | ||
324 | .catch(err => logger.error('Cannot add view to video/send view to followers for %s.', videoInstance.uuid, err)) | ||
325 | } else { | 332 | } else { |
326 | baseIncrementPromise | 333 | await sendCreateViewToOrigin(serverAccount, videoInstance, undefined) |
327 | .then(serverAccount => sendCreateViewToOrigin(serverAccount, videoInstance, undefined)) | ||
328 | .catch(err => logger.error('Cannot send view to origin server for %s.', videoInstance.uuid, err)) | ||
329 | } | 334 | } |
330 | 335 | ||
331 | // Do not wait the view system | 336 | return res.status(204).end() |
332 | return res.json(videoInstance.toFormattedDetailsJSON()) | ||
333 | } | 337 | } |
334 | 338 | ||
335 | async function getVideoDescription (req: express.Request, res: express.Response) { | 339 | async function getVideoDescription (req: express.Request, res: express.Response) { |