Add server hooks for listing subscription

This commit is contained in:
Wicklow 2023-02-24 16:21:26 +01:00 committed by Chocobozzz
parent d41f4a6dc6
commit c0687c91b9
4 changed files with 40 additions and 2 deletions

View File

@ -30,6 +30,7 @@ import {
} from '../../../middlewares/validators'
import { ActorFollowModel } from '../../../models/actor/actor-follow'
import { VideoModel } from '../../../models/video/video'
import { Hooks } from '@server/lib/plugins/hooks'
const mySubscriptionsRouter = express.Router()
@ -170,7 +171,7 @@ async function getUserSubscriptionVideos (req: express.Request, res: express.Res
const countVideos = getCountVideos(req)
const query = pickCommonVideoQuery(req.query)
const resultList = await VideoModel.listForApi({
const apiOptions = await Hooks.wrapObject({
...query,
displayOnlyForFollower: {
@ -180,7 +181,13 @@ async function getUserSubscriptionVideos (req: express.Request, res: express.Res
nsfw: buildNSFWFilter(res, query.nsfw),
user,
countVideos
})
}, 'filter:api.user.me.subscription-videos.list.params')
const resultList = await Hooks.wrapPromiseFun(
VideoModel.listForApi,
apiOptions,
'filter:api.user.me.subscription-videos.list.result'
)
return res.json(getFormattedObjects(resultList.data, resultList.total, guessAdditionalAttributesFromQuery(query)))
}

View File

@ -89,6 +89,16 @@ async function register ({ registerHook, registerSetting, settingsManager, stora
handler: obj => addToTotal(obj, 4)
})
registerHook({
target: 'filter:api.user.me.subscription-videos.list.params',
handler: obj => Object.assign({}, obj, { count: 1 })
})
registerHook({
target: 'filter:api.user.me.subscription-videos.list.result',
handler: obj => addToTotal(obj, 4)
})
registerHook({
target: 'filter:api.video.get.result',
handler: video => {

View File

@ -71,6 +71,9 @@ describe('Test plugin filter hooks', function () {
}
}
})
// Root subscribes to itself
await servers[0].subscriptions.add({ targetUri: 'root_channel@' + servers[0].host })
})
describe('Videos', function () {
@ -151,6 +154,20 @@ describe('Test plugin filter hooks', function () {
expect(total).to.equal(14)
})
it('Should run filter:api.user.me.subscription-videos.list.params', async function () {
const { data } = await servers[0].subscriptions.listVideos()
// 1 plugin set the count parameter to 1
expect(data).to.have.lengthOf(1)
})
it('Should run filter:api.user.me.subscription-videos.list.result', async function () {
const { total } = await servers[0].subscriptions.listVideos()
// Plugin do +4 to the total result
expect(total).to.equal(14)
})
it('Should run filter:api.video.get.result', async function () {
const video = await servers[0].videos.get({ id: videoUUID })
expect(video.name).to.contain('<3')

View File

@ -27,6 +27,10 @@ export const serverFilterHookObject = {
'filter:api.overviews.videos.list.params': true,
'filter:api.overviews.videos.list.result': true,
// Filter params/result used to list subscription videos for the REST API
'filter:api.user.me.subscription-videos.list.params': true,
'filter:api.user.me.subscription-videos.list.result': true,
// Filter params/results to search videos/channels in the DB or on the remote index
'filter:api.search.videos.local.list.params': true,
'filter:api.search.videos.local.list.result': true,