X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Ffeeds.ts;h=682f4abdaf873d56087f4b8b242b8afa0066e487;hb=26b7305a232e547709f433a6edf700bf495935d8;hp=c928dfacb4282abaeb7efc9f066f9e952153c897;hpb=fe3a55b071c99b346e9e9ab786f5d219e5a064cd;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/feeds.ts b/server/controllers/feeds.ts index c928dfacb..682f4abda 100644 --- a/server/controllers/feeds.ts +++ b/server/controllers/feeds.ts @@ -1,12 +1,14 @@ import * as express from 'express' import { CONFIG, FEEDS, ROUTE_CACHE_LIFETIME } from '../initializers/constants' -import { asyncMiddleware, videoFeedsValidator, setDefaultSort, videosSortValidator, videoCommentsFeedsValidator } from '../middlewares' +import { THUMBNAILS_SIZE } from '../initializers' +import { asyncMiddleware, setDefaultSort, videoCommentsFeedsValidator, videoFeedsValidator, videosSortValidator } from '../middlewares' import { VideoModel } from '../models/video/video' import * as Feed from 'pfeed' import { AccountModel } from '../models/account/account' import { cacheRoute } from '../middlewares/cache' import { VideoChannelModel } from '../models/video/video-channel' import { VideoCommentModel } from '../models/video/video-comment' +import { buildNSFWFilter } from '../helpers/express-utils' const feedsRouter = express.Router() @@ -33,19 +35,25 @@ export { // --------------------------------------------------------------------------- async function generateVideoCommentsFeed (req: express.Request, res: express.Response, next: express.NextFunction) { - let feed = initFeed() const start = 0 - const videoId: number = res.locals.video ? res.locals.video.id : undefined + const video = res.locals.video as VideoModel + const videoId: number = video ? video.id : undefined const comments = await VideoCommentModel.listForFeed(start, FEEDS.COUNT, videoId) + const name = video ? video.name : CONFIG.INSTANCE.NAME + const description = video ? video.description : CONFIG.INSTANCE.DESCRIPTION + const feed = initFeed(name, description) + // Adding video items to the feed, one at a time comments.forEach(comment => { + const link = CONFIG.WEBSERVER.URL + '/videos/watch/' + comment.Video.uuid + ';threadId=' + comment.getThreadId() + feed.addItem({ title: `${comment.Video.name} - ${comment.Account.getDisplayName()}`, id: comment.url, - link: comment.url, + link, content: comment.text, author: [ { @@ -62,18 +70,33 @@ async function generateVideoCommentsFeed (req: express.Request, res: express.Res } async function generateVideoFeed (req: express.Request, res: express.Response, next: express.NextFunction) { - let feed = initFeed() const start = 0 const account: AccountModel = res.locals.account const videoChannel: VideoChannelModel = res.locals.videoChannel - const hideNSFW = CONFIG.INSTANCE.DEFAULT_NSFW_POLICY === 'do_not_list' + const nsfw = buildNSFWFilter(res, req.query.nsfw) + + 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 = CONFIG.INSTANCE.NAME + description = CONFIG.INSTANCE.DESCRIPTION + } + + const feed = initFeed(name, description) const resultList = await VideoModel.listForApi({ start, count: FEEDS.COUNT, sort: req.query.sort, - hideNSFW, + nsfw, filter: req.query.filter, withFiles: true, accountId: account ? account.id : null, @@ -92,7 +115,7 @@ async function generateVideoFeed (req: express.Request, res: express.Response, n feed.addItem({ title: video.name, id: video.url, - link: video.url, + link: CONFIG.WEBSERVER.URL + '/videos/watch/' + video.uuid, description: video.getTruncatedDescription(), content: video.description, author: [ @@ -104,7 +127,14 @@ async function generateVideoFeed (req: express.Request, res: express.Response, n date: video.publishedAt, language: video.language, nsfw: video.nsfw, - torrent: torrents + torrent: torrents, + thumbnail: [ + { + url: CONFIG.WEBSERVER.URL + video.getThumbnailStaticPath(), + height: THUMBNAILS_SIZE.height, + width: THUMBNAILS_SIZE.width + } + ] }) }) @@ -112,12 +142,12 @@ async function generateVideoFeed (req: express.Request, res: express.Response, n return sendFeed(feed, req, res) } -function initFeed () { +function initFeed (name: string, description: string) { const webserverUrl = CONFIG.WEBSERVER.URL return new Feed({ - title: CONFIG.INSTANCE.NAME, - description: CONFIG.INSTANCE.DESCRIPTION, + title: name, + description, // updated: TODO: somehowGetLatestUpdate, // optional, default = today id: webserverUrl, link: webserverUrl,