From 38267c0c8aa80f974a2c0b4c2bd33c8d8008ac94 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 8 Dec 2020 10:30:33 +0100 Subject: Use dedicated hooks for account/channel videos --- server/controllers/api/accounts.ts | 4 +-- server/controllers/api/video-channel.ts | 11 ++++++-- server/tests/fixtures/peertube-plugin-test/main.js | 28 +++++++++++++++++--- server/tests/plugins/filter-hooks.ts | 30 ++++++++++++++++++++++ 4 files changed, 65 insertions(+), 8 deletions(-) (limited to 'server') diff --git a/server/controllers/api/accounts.ts b/server/controllers/api/accounts.ts index 9eb29d330..e807b4f44 100644 --- a/server/controllers/api/accounts.ts +++ b/server/controllers/api/accounts.ts @@ -176,12 +176,12 @@ async function listAccountVideos (req: express.Request, res: express.Response) { accountId: account.id, user: res.locals.oauth ? res.locals.oauth.token.User : undefined, countVideos - }, 'filter:api.videos.list.params') + }, 'filter:api.accounts.videos.list.params') const resultList = await Hooks.wrapPromiseFun( VideoModel.listForApi, apiOptions, - 'filter:api.videos.list.result' + 'filter:api.accounts.videos.list.result' ) return res.json(getFormattedObjects(resultList.data, resultList.total)) diff --git a/server/controllers/api/video-channel.ts b/server/controllers/api/video-channel.ts index 5c96950c5..c48e00232 100644 --- a/server/controllers/api/video-channel.ts +++ b/server/controllers/api/video-channel.ts @@ -1,4 +1,5 @@ import * as express from 'express' +import { Hooks } from '@server/lib/plugins/hooks' import { getServerActor } from '@server/models/application/application' import { MChannelAccountDefault } from '@server/types/models' import { VideoChannelCreate, VideoChannelUpdate } from '../../../shared' @@ -266,7 +267,7 @@ async function listVideoChannelVideos (req: express.Request, res: express.Respon const followerActorId = isUserAbleToSearchRemoteURI(res) ? null : undefined const countVideos = getCountVideos(req) - const resultList = await VideoModel.listForApi({ + const apiOptions = await Hooks.wrapObject({ followerActorId, start: req.query.start, count: req.query.count, @@ -283,7 +284,13 @@ async function listVideoChannelVideos (req: express.Request, res: express.Respon videoChannelId: videoChannelInstance.id, user: res.locals.oauth ? res.locals.oauth.token.User : undefined, countVideos - }) + }, 'filter:api.video-channels.videos.list.params') + + const resultList = await Hooks.wrapPromiseFun( + VideoModel.listForApi, + apiOptions, + 'filter:api.video-channels.videos.list.result' + ) return res.json(getFormattedObjects(resultList.data, resultList.total)) } diff --git a/server/tests/fixtures/peertube-plugin-test/main.js b/server/tests/fixtures/peertube-plugin-test/main.js index 322c0610c..e5a9f8df5 100644 --- a/server/tests/fixtures/peertube-plugin-test/main.js +++ b/server/tests/fixtures/peertube-plugin-test/main.js @@ -39,6 +39,26 @@ async function register ({ registerHook, registerSetting, settingsManager, stora handler: obj => addToTotal(obj) }) + registerHook({ + target: 'filter:api.accounts.videos.list.params', + handler: obj => addToCount(obj) + }) + + registerHook({ + target: 'filter:api.accounts.videos.list.result', + handler: obj => addToTotal(obj, 2) + }) + + registerHook({ + target: 'filter:api.video-channels.videos.list.params', + handler: obj => addToCount(obj, 3) + }) + + registerHook({ + target: 'filter:api.video-channels.videos.list.result', + handler: obj => addToTotal(obj, 3) + }) + registerHook({ target: 'filter:api.video.get.result', handler: video => { @@ -167,14 +187,14 @@ module.exports = { // ############################################################################ -function addToCount (obj) { - return Object.assign({}, obj, { count: obj.count + 1 }) +function addToCount (obj, amount = 1) { + return Object.assign({}, obj, { count: obj.count + amount }) } -function addToTotal (result) { +function addToTotal (result, amount = 1) { return { data: result.data, - total: result.total + 1 + total: result.total + amount } } diff --git a/server/tests/plugins/filter-hooks.ts b/server/tests/plugins/filter-hooks.ts index 9939b8e6e..3a5c7aa62 100644 --- a/server/tests/plugins/filter-hooks.ts +++ b/server/tests/plugins/filter-hooks.ts @@ -8,9 +8,11 @@ import { addVideoCommentThread, createLive, doubleFollow, + getAccountVideos, getConfig, getPluginTestPath, getVideo, + getVideoChannelVideos, getVideoCommentThreads, getVideosList, getVideosListPagination, @@ -90,6 +92,34 @@ describe('Test plugin filter hooks', function () { expect(res.body.total).to.equal(11) }) + it('Should run filter:api.accounts.videos.list.params', async function () { + const res = await getAccountVideos(servers[0].url, servers[0].accessToken, 'root', 0, 2) + + // 1 plugin do +1 to the count parameter + expect(res.body.data).to.have.lengthOf(3) + }) + + it('Should run filter:api.accounts.videos.list.result', async function () { + const res = await getAccountVideos(servers[0].url, servers[0].accessToken, 'root', 0, 2) + + // Plugin do +2 to the total result + expect(res.body.total).to.equal(12) + }) + + it('Should run filter:api.video-channels.videos.list.params', async function () { + const res = await getVideoChannelVideos(servers[0].url, servers[0].accessToken, 'root_channel', 0, 2) + + // 1 plugin do +3 to the count parameter + expect(res.body.data).to.have.lengthOf(5) + }) + + it('Should run filter:api.video-channels.videos.list.result', async function () { + const res = await getAccountVideos(servers[0].url, servers[0].accessToken, 'root_channel', 0, 2) + + // Plugin do +3 to the total result + expect(res.body.total).to.equal(13) + }) + it('Should run filter:api.video.get.result', async function () { const res = await getVideo(servers[0].url, videoUUID) -- cgit v1.2.3