1
0
Fork 0
mirror of https://github.com/Chocobozzz/PeerTube.git synced 2025-10-06 03:50:26 +02:00

allow limiting video-comments rss feeds to an account or video channel

This commit is contained in:
Rigel Kent 2020-06-27 13:12:30 +02:00
parent 2c31866430
commit 00494d6e2a
No known key found for this signature in database
GPG key ID: 5E53E96A494E452F
5 changed files with 119 additions and 23 deletions

View file

@ -27,6 +27,7 @@ feedsRouter.get('/feeds/video-comments.:format',
'Content-Type'
]
})(ROUTE_CACHE_LIFETIME.FEEDS)),
asyncMiddleware(videoFeedsValidator),
asyncMiddleware(videoCommentsFeedsValidator),
asyncMiddleware(generateVideoCommentsFeed)
)
@ -58,13 +59,36 @@ async function generateVideoCommentsFeed (req: express.Request, res: express.Res
const start = 0
const video = res.locals.videoAll
const videoId: number = video ? video.id : undefined
const account = res.locals.account
const videoChannel = res.locals.videoChannel
const comments = await VideoCommentModel.listForFeed(start, FEEDS.COUNT, videoId)
const comments = await VideoCommentModel.listForFeed({
start,
count: FEEDS.COUNT,
videoId: video ? video.id : undefined,
accountId: account ? account.id : undefined,
videoChannelId: videoChannel ? videoChannel.id : undefined
})
const name = video ? video.name : CONFIG.INSTANCE.NAME
const description = video ? video.description : CONFIG.INSTANCE.DESCRIPTION
const feed = initFeed(name, description)
let name: string
let description: string
if (videoChannel) {
name = videoChannel.getDisplayName()
description = videoChannel.description
} else if (account) {
name = account.getDisplayName()
description = account.description
} else {
name = video ? video.name : CONFIG.INSTANCE.NAME
description = video ? video.description : CONFIG.INSTANCE.DESCRIPTION
}
const feed = initFeed({
name,
description,
resourceType: 'video-comments',
queryString: new URL(WEBSERVER.URL + req.originalUrl).search
})
// Adding video items to the feed, one at a time
for (const comment of comments) {
@ -116,7 +140,12 @@ async function generateVideoFeed (req: express.Request, res: express.Response) {
description = CONFIG.INSTANCE.DESCRIPTION
}
const feed = initFeed(name, description)
const feed = initFeed({
name,
description,
resourceType: 'videos',
queryString: new URL(WEBSERVER.URL + req.url).search
})
const resultList = await VideoModel.listForApi({
start,
@ -207,8 +236,14 @@ async function generateVideoFeed (req: express.Request, res: express.Response) {
return sendFeed(feed, req, res)
}
function initFeed (name: string, description: string) {
function initFeed (parameters: {
name: string
description: string
resourceType?: 'videos' | 'video-comments'
queryString?: string
}) {
const webserverUrl = WEBSERVER.URL
const { name, description, resourceType, queryString } = parameters
return new Feed({
title: name,
@ -222,9 +257,9 @@ function initFeed (name: string, description: string) {
` and potential licenses granted by each content's rightholder.`,
generator: `Toraifōsu`, // ^.~
feedLinks: {
json: `${webserverUrl}/feeds/videos.json`,
atom: `${webserverUrl}/feeds/videos.atom`,
rss: `${webserverUrl}/feeds/videos.xml`
json: `${webserverUrl}/feeds/${resourceType}.json${queryString}`,
atom: `${webserverUrl}/feeds/${resourceType}.atom${queryString}`,
rss: `${webserverUrl}/feeds/${resourceType}.xml${queryString}`
},
author: {
name: 'Instance admin of ' + CONFIG.INSTANCE.NAME,