0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00

Fixed correct promise order in RSS feed generator (#9726)

no issue

- the 'rss.feed' filter used to get an empty feed as a parameter, because item generation is done via promises
- now it waits until all items have been added
This commit is contained in:
Denis Zhbankov 2018-09-10 12:39:38 +03:00 committed by Katharina Irrgang
parent 839eb5bd43
commit f12fd4b101

View file

@ -1,4 +1,5 @@
var downsize = require('downsize'), var downsize = require('downsize'),
Promise = require('bluebird'),
RSS = require('rss'), RSS = require('rss'),
urlService = require('../../services/url'), urlService = require('../../services/url'),
filters = require('../../filters'), filters = require('../../filters'),
@ -71,32 +72,32 @@ generateItem = function generateItem(post, siteUrl, secure) {
* @param {{title, description, safeVersion, secure, posts}} data * @param {{title, description, safeVersion, secure, posts}} data
*/ */
generateFeed = function generateFeed(baseUrl, data) { generateFeed = function generateFeed(baseUrl, data) {
var siteUrl = urlService.utils.urlFor('home', {secure: data.secure}, true), const siteUrl = urlService.utils.urlFor('home', {secure: data.secure}, true);
feedUrl = urlService.utils.urlFor({relativeUrl: baseUrl, secure: data.secure}, true), const feed = new RSS({
feed = new RSS({ title: data.title,
title: data.title, description: data.description,
description: data.description, generator: 'Ghost ' + data.safeVersion,
generator: 'Ghost ' + data.safeVersion, feed_url: urlService.utils.urlFor({relativeUrl: baseUrl, secure: data.secure}, true),
feed_url: feedUrl, site_url: siteUrl,
site_url: siteUrl, image_url: urlService.utils.urlFor({relativeUrl: 'favicon.png'}, true),
image_url: urlService.utils.urlFor({relativeUrl: 'favicon.png'}, true), ttl: '60',
ttl: '60', custom_namespaces: {
custom_namespaces: { content: 'http://purl.org/rss/1.0/modules/content/',
content: 'http://purl.org/rss/1.0/modules/content/', media: 'http://search.yahoo.com/mrss/'
media: 'http://search.yahoo.com/mrss/' }
}
});
data.posts.forEach(function forEach(post) {
var item = generateItem(post, siteUrl, data.secure);
filters.doFilter('rss.item', item, post).then(function then(item) {
feed.item(item);
});
}); });
return filters.doFilter('rss.feed', feed).then(function then(feed) { return data.posts.reduce((feedPromise, post) => {
return feed.xml(); return feedPromise.then(() => {
const item = generateItem(post, siteUrl, data.secure);
return filters.doFilter('rss.item', item, post).then((item) => {
return feed.item(item);
});
});
}, Promise.resolve()).then(() => {
return filters.doFilter('rss.feed', feed).then((feed) => {
return feed.xml();
});
}); });
}; };