X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fvideos%2Findex.ts;h=2d088a73e2c6f13b4b76dbc6c7e1a02f623adc4d;hb=b46cf4b920984492df598c1b61179acfc7f6f22e;hp=821161c646f0c9c47159320a66c556b8b07fe0ee;hpb=3c10840fa90fc88fc98e8169faf4745ff6c80893;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts index 821161c64..2d088a73e 100644 --- a/server/controllers/api/videos/index.ts +++ b/server/controllers/api/videos/index.ts @@ -1,8 +1,7 @@ import express from 'express' -import toInt from 'validator/lib/toInt' import { pickCommonVideoQuery } from '@server/helpers/query' import { doJSONRequest } from '@server/helpers/requests' -import { LiveManager } from '@server/lib/live' +import { VideoViews } from '@server/lib/video-views' import { openapiOperationDoc } from '@server/middlewares/doc' import { getServerActor } from '@server/models/application/application' import { guessAdditionalAttributesFromQuery } from '@server/models/video/formatter/video-format-utils' @@ -17,7 +16,6 @@ import { sequelizeTypescript } from '../../../initializers/database' import { sendView } from '../../../lib/activitypub/send/send-view' import { JobQueue } from '../../../lib/job-queue' import { Hooks } from '../../../lib/plugins/hooks' -import { Redis } from '../../../lib/redis' import { asyncMiddleware, asyncRetryTransactionMiddleware, @@ -28,17 +26,16 @@ import { paginationValidator, setDefaultPagination, setDefaultVideosSort, - videoFileMetadataGetValidator, videosCustomGetValidator, videosGetValidator, videosRemoveValidator, videosSortValidator } from '../../../middlewares' import { VideoModel } from '../../../models/video/video' -import { VideoFileModel } from '../../../models/video/video-file' import { blacklistRouter } from './blacklist' import { videoCaptionsRouter } from './captions' import { videoCommentRouter } from './comment' +import { filesRouter } from './files' import { videoImportsRouter } from './import' import { liveRouter } from './live' import { ownershipVideoRouter } from './ownership' @@ -60,6 +57,7 @@ videosRouter.use('/', watchingRouter) videosRouter.use('/', liveRouter) videosRouter.use('/', uploadRouter) videosRouter.use('/', updateRouter) +videosRouter.use('/', filesRouter) videosRouter.get('/categories', openapiOperationDoc({ operationId: 'getCategories' }), @@ -94,10 +92,6 @@ videosRouter.get('/:id/description', asyncMiddleware(videosGetValidator), asyncMiddleware(getVideoDescription) ) -videosRouter.get('/:id/metadata/:videoFileId', - asyncMiddleware(videoFileMetadataGetValidator), - asyncMiddleware(getVideoFileMetadata) -) videosRouter.get('/:id', openapiOperationDoc({ operationId: 'getVideo' }), optionalAuthenticate, @@ -107,7 +101,7 @@ videosRouter.get('/:id', ) videosRouter.post('/:id/views', openapiOperationDoc({ operationId: 'addView' }), - asyncMiddleware(videosCustomGetValidator('only-immutable-attributes')), + asyncMiddleware(videosCustomGetValidator('only-video')), asyncMiddleware(viewVideo) ) @@ -153,44 +147,17 @@ function getVideo (_req: express.Request, res: express.Response) { } async function viewVideo (req: express.Request, res: express.Response) { - const immutableVideoAttrs = res.locals.onlyImmutableVideo + const video = res.locals.onlyVideo const ip = req.ip - const exists = await Redis.Instance.doesVideoIPViewExist(ip, immutableVideoAttrs.uuid) - if (exists) { - logger.debug('View for ip %s and video %s already exists.', ip, immutableVideoAttrs.uuid) - return res.status(HttpStatusCode.NO_CONTENT_204).end() - } - - const video = await VideoModel.load(immutableVideoAttrs.id) - - const promises: Promise[] = [ - Redis.Instance.setIPVideoView(ip, video.uuid, video.isLive) - ] - - let federateView = true - - // Increment our live manager - if (video.isLive && video.isOwned()) { - LiveManager.Instance.addViewTo(video.id) - - // Views of our local live will be sent by our live manager - federateView = false - } + const success = await VideoViews.Instance.processView({ video, ip }) - // Increment our video views cache counter - if (!video.isLive) { - promises.push(Redis.Instance.addVideoView(video.id)) - } - - if (federateView) { + if (success) { const serverActor = await getServerActor() - promises.push(sendView(serverActor, video, undefined)) - } - - await Promise.all(promises) + await sendView(serverActor, video, undefined) - Hooks.runAction('action:api.video.viewed', { video, ip }) + Hooks.runAction('action:api.video.viewed', { video: video, ip }) + } return res.status(HttpStatusCode.NO_CONTENT_204).end() } @@ -205,12 +172,6 @@ async function getVideoDescription (req: express.Request, res: express.Response) return res.json({ description }) } -async function getVideoFileMetadata (req: express.Request, res: express.Response) { - const videoFile = await VideoFileModel.loadWithMetadata(toInt(req.params.videoFileId)) - - return res.json(videoFile.metadata) -} - async function listVideos (req: express.Request, res: express.Response) { const serverActor = await getServerActor()