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:
parent
839eb5bd43
commit
f12fd4b101
1 changed files with 25 additions and 24 deletions
|
@ -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();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue