From 661fdfb43e1f9c2545db350b45018bccbe065a6b Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 4 Sep 2013 13:52:28 -0400 Subject: [PATCH] bugfixing and allowing feeds to be generated on request (as opposed to just updated on posting --- package.json | 3 ++- src/feed.js | 32 ++++++++++++++++++-------------- src/webserver.js | 36 +++++++++++++++++++++--------------- 3 files changed, 41 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 17223e898b..8af51ccbc4 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,8 @@ "reds": "~0.2.4", "winston": "~0.7.2", "nodebb-plugin-mentions": "~0.1.0", - "nodebb-plugin-markdown": "~0.1.0" + "nodebb-plugin-markdown": "~0.1.0", + "rss": "~0.2.0" }, "bugs": { "url": "https://github.com/designcreateplay/NodeBB/issues" diff --git a/src/feed.js b/src/feed.js index 8799db8b85..2a3b1db083 100644 --- a/src/feed.js +++ b/src/feed.js @@ -14,13 +14,13 @@ baseUrl: nconf.get('url') + 'feeds' }; - Feed.saveFeed = function(location, feed) { + Feed.saveFeed = function(location, feed, callback) { var savePath = path.join(__dirname, '../', location); fs.writeFile(savePath, feed.xml(), function (err) { - if(err) { - winston.err(err); - } + if(err) return winston.err(err); + + if (callback) callback(err); }); } @@ -41,23 +41,25 @@ ttl: Feed.defaults.ttl }), topic_posts = topicData.main_posts.concat(topicData.posts), - title, postData; + title, postData, dateStamp; for (var i = 0, ii = topic_posts.length; i < ii; i++) { - title = 'Reply to ' + topicData.topic_name + ' on ' + (new Date(parseInt(topic_posts[i].timestamp, 10)).toUTCString()); postData = topic_posts[i]; + dateStamp = new Date(parseInt(postData.edited === 0 ? postData.timestamp : postData.edited, 10)).toUTCString(); + title = 'Reply to ' + topicData.topic_name + ' on ' + dateStamp; feed.item({ title: title, description: postData.content, url: nconf.get('url') + 'topic/' + topicData.slug + '#' + postData.pid, author: postData.username, - date: new Date(parseInt(postData.edited === 0 ? postData.timestamp : postData.edited, 10)).toUTCString() + date: dateStamp }); } - Feed.saveFeed('feeds/topics/' + tid + '.rss', feed); - if (callback) callback(); + Feed.saveFeed('feeds/topics/' + tid + '.rss', feed, function(err) { + if (callback) callback(); + }); }); }; @@ -76,22 +78,24 @@ ttl: Feed.defaults.ttl }), topics = categoryData.topics, - title, topicData; + title, topicData, dateStamp; for (var i = 0, ii = topics.length; i < ii; i++) { - title = topics[i].title + '. Posted on ' + (new Date(parseInt(topics[i].timestamp, 10)).toUTCString()); topicData = topics[i]; + dateStamp = new Date(parseInt(topicData.lastposttime, 10)).toUTCString(); + title = topics[i].title; feed.item({ title: title, url: nconf.get('url') + 'topic/' + topicData.slug, author: topicData.username, - date: new Date(parseInt(topicData.lastposttime, 10)).toUTCString() + date: dateStamp }); } - Feed.saveFeed('feeds/categories/' + cid + '.rss', feed); - if (callback) callback(); + Feed.saveFeed('feeds/categories/' + cid + '.rss', feed, function(err) { + if (callback) callback(); + }); }); }; diff --git a/src/webserver.js b/src/webserver.js index 6c7b9193e9..5c23978493 100644 --- a/src/webserver.js +++ b/src/webserver.js @@ -210,21 +210,17 @@ var express = require('express'), app.get('/topic/:topic_id/:slug?', function(req, res) { - var tid = req.params.topic_id; + if (tid.match(/^\d+\.rss$/)) { tid = tid.slice(0, -4); var rssPath = path.join(__dirname, '../', 'feeds/topics', tid + '.rss'), loadFeed = function() { fs.readFile(rssPath, function (err, data) { - if (err) { - res.type('text').send(404, "Unable to locate an rss feed at this location."); - return; - } - - res.type('xml').set('Content-Length', data.length).send(data); + if (err) res.type('text').send(404, "Unable to locate an rss feed at this location."); + else res.type('xml').set('Content-Length', data.length).send(data); }); - return; + }; if (!fs.existsSync(rssPath)) { @@ -232,6 +228,8 @@ var express = require('express'), loadFeed(); }); } else loadFeed(); + + return; } async.waterfall([ @@ -291,14 +289,22 @@ var express = require('express'), var cid = req.params.category_id; if (cid.match(/^\d+\.rss$/)) { - fs.readFile(path.join(__dirname, '../', 'feeds/categories', cid), function (err, data) { - if (err) { - res.type('text').send(404, "Unable to locate an rss feed at this location."); - return; - } + cid = cid.slice(0, -4); + var rssPath = path.join(__dirname, '../', 'feeds/categories', cid + '.rss'), + loadFeed = function() { + fs.readFile(rssPath, function (err, data) { + if (err) res.type('text').send(404, "Unable to locate an rss feed at this location."); + else res.type('xml').set('Content-Length', data.length).send(data); + }); + + }; + + if (!fs.existsSync(rssPath)) { + feed.updateCategory(cid, function() { + loadFeed(); + }); + } else loadFeed(); - res.type('xml').set('Content-Length', data.length).send(data); - }); return; }