|
@@ -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,
|