X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fbots.ts;h=8d1fa72f30ded63da0fe4efe4d72016c5b77915f;hb=5d43dae3699d088698560851cb6f35f3dbc70c69;hp=e25d9c21b01c8a8dd48b10d6dcdcfb63aa43766e;hpb=3acc50844047a37698f0618fa235c138e386a053;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/bots.ts b/server/controllers/bots.ts index e25d9c21b..8d1fa72f3 100644 --- a/server/controllers/bots.ts +++ b/server/controllers/bots.ts @@ -1,8 +1,7 @@ import * as express from 'express' import { asyncMiddleware } from '../middlewares' import { ROUTE_CACHE_LIFETIME, WEBSERVER } from '../initializers/constants' -import * as sitemapModule from 'sitemap' -import { logger } from '../helpers/logger' +import { SitemapStream, streamToPromise } from 'sitemap' import { VideoModel } from '../models/video/video' import { VideoChannelModel } from '../models/video/video-channel' import { AccountModel } from '../models/account/account' @@ -15,7 +14,7 @@ const botsRouter = express.Router() // Special route that add OpenGraph and oEmbed tags // Do not use a template engine for a so little thing botsRouter.use('/sitemap.xml', - asyncMiddleware(cacheRoute(ROUTE_CACHE_LIFETIME.SITEMAP)), + asyncMiddleware(cacheRoute()(ROUTE_CACHE_LIFETIME.SITEMAP)), asyncMiddleware(getSitemap) ) @@ -34,20 +33,17 @@ async function getSitemap (req: express.Request, res: express.Response) { urls = urls.concat(await getSitemapVideoChannelUrls()) urls = urls.concat(await getSitemapAccountUrls()) - const sitemap = sitemapModule.createSitemap({ - hostname: WEBSERVER.URL, - urls: urls - }) + const sitemapStream = new SitemapStream({ hostname: WEBSERVER.URL }) - sitemap.toXML((err, xml) => { - if (err) { - logger.error('Cannot generate sitemap.', { err }) - return res.sendStatus(500) - } + for (const urlObj of urls) { + sitemapStream.write(urlObj) + } + sitemapStream.end() - res.header('Content-Type', 'application/xml') - res.send(xml) - }) + const xml = await streamToPromise(sitemapStream) + + res.header('Content-Type', 'application/xml') + res.send(xml) } async function getSitemapVideoChannelUrls () { @@ -67,17 +63,18 @@ async function getSitemapAccountUrls () { } async function getSitemapLocalVideoUrls () { - const resultList = await VideoModel.listForApi({ + const { data } = await VideoModel.listForApi({ start: 0, count: undefined, sort: 'createdAt', includeLocalVideos: true, nsfw: buildNSFWFilter(), filter: 'local', - withFiles: false + withFiles: false, + countVideos: false }) - return resultList.data.map(v => ({ + return data.map(v => ({ url: WEBSERVER.URL + '/videos/watch/' + v.uuid, video: [ {