From 8ee270f04f454e229b39eea6a843634383ca8dff Mon Sep 17 00:00:00 2001 From: Angelo DiNardi Date: Sun, 4 Jun 2017 23:37:14 -0700 Subject: [PATCH 1/7] Make an attempt at being able to render rss --- index.js | 65 +++++++++++++++++++++------------ render.js | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+), 22 deletions(-) diff --git a/index.js b/index.js index 5b00d6c..3ed0bee 100644 --- a/index.js +++ b/index.js @@ -16,7 +16,10 @@ var { formatMsgs, wrapPage, renderThread, - renderAbout + renderAbout, + renderItem, + wrapRss, + renderRssContent, } = require('./render'); var appHash = hash([fs.readFileSync(__filename)]) @@ -90,7 +93,7 @@ exports.init = function (sbot, config) { } } - function serveFeed(req, res, feedId) { + function serveFeed(req, res, feedId, ext) { console.log("serving feed: " + feedId) var showAll = req.url.endsWith("?showAll") @@ -99,26 +102,43 @@ exports.init = function (sbot, config) { getAbout(feedId, function (err, about) { if (err) return respond(res, 500, err.stack || err) - pull( - sbot.createUserStream({ id: feedId, reverse: true, limit: showAll ? -1 : 10 }), - pull.collect(function (err, logs) { - if (err) return respond(res, 500, err.stack || err) - res.writeHead(200, { - 'Content-Type': ctype("html") - }) - pull( - pull.values(logs), - paramap(addAuthorAbout, 8), - paramap(addFollowAbout, 8), - paramap(addVoteMessage, 8), - paramap(addGitLinks, 8), - pull(renderAbout(defaultOpts, about, showAllHTML), wrapPage(about.name)), - toPull(res, function (err) { - if (err) console.error('[viewer]', err) - }) - ) - }) - ) + function render() { + switch (ext) { + case 'rss': + return pull( + // formatMsgs(feedId, ext, defaultOpts) + pull.filter( (msg) => { + return !!renderRssContent(defaultOpts, msg.value.content || {}); + }), + renderItem(defaultOpts), wrapRss(about.name, defaultOpts) + ); + default: + return pull( + renderAbout(defaultOpts, about, showAllHTML), wrapPage(about.name) + ); + } + } + + pull( + sbot.createUserStream({ id: feedId, reverse: true, limit: showAll ? -1 : (ext == 'rss' ? 25 :10) }), + pull.collect(function (err, logs) { + if (err) return respond(res, 500, err.stack || err) + res.writeHead(200, { + 'Content-Type': ctype(ext) + }) + pull( + pull.values(logs), + paramap(addAuthorAbout, 8), + paramap(addFollowAbout, 8), + paramap(addVoteMessage, 8), + paramap(addGitLinks, 8), + render(), + toPull(res, function (err) { + if (err) console.error('[viewer]', err) + }) + ) + }) + ) }) } @@ -363,6 +383,7 @@ function ctype(name) { case 'js': return 'text/javascript' case 'css': return 'text/css' case 'json': return 'application/json' + case 'rss': return 'text/xml' } } diff --git a/render.js b/render.js index 0ffedff..4b9287b 100644 --- a/render.js +++ b/render.js @@ -13,6 +13,9 @@ exports.renderEmoji = renderEmoji; exports.formatMsgs = formatMsgs; exports.renderThread = renderThread; exports.renderAbout = renderAbout; +exports.renderItem = renderItem; +exports.wrapRss = wrapRss; +exports.renderRssContent = renderRssContent; function MdRenderer(opts) { marked.Renderer.call(this, {}); @@ -84,6 +87,8 @@ function formatMsgs(id, ext, opts) { return pull(renderThread(opts), wrapJSEmbed(opts)); case "json": return wrapJSON(); + case "rss": + return pull(renderItem(opts), wrapRss(id, opts)); default: return null; } @@ -136,6 +141,12 @@ function renderThread(opts, showAllHTML = "") { ); } +function renderItem(opts) { + return pull( + pull.map(renderRss.bind(this, opts)) + ); +} + function wrapPage(id) { return wrap( "" + @@ -150,6 +161,18 @@ function wrapPage(id) { ); } +function wrapRss(id, opts) { + return wrap( + '' + + '' + + '' + + '' + id + ' | ssb-viewer', + + ''+ + '' + ); +} + var styles = `