const { Feed } = require("feed"); const fs = require("fs"); const showdown = require("showdown"); require("./showdown-prettify"); require("./showdown-footnotes"); const converter = new showdown.Converter({ parseImgDimensions: true, extensions: ["prettify", "footnotes"] }); module.exports = function () { let folder = __dirname + "/../"; createFeeds(folder); fs.watchFile(folder + "blog/posts.json", function (curr, prev) { if (curr.mtime == prev.mtime) return; createFeeds(folder); }); } function createFeeds(folder) { console.log("Refreshing feeds..."); createFeed(function (feed) { fs.writeFile(folder + "feed.json", feed.json1(), function (_, _) {}); fs.writeFile(folder + "rss.xml", feed.rss2(), function (_, _) {}); fs.writeFile(folder + "atom.xml", feed.atom1(), function (_, _) {}); }); } function createFeed(callback) { const feed = new Feed({ title: "Ellpeck's Blog", description: "Occasionally I enjoy writing stuff. So here's some of the stuff I've written about gaming, programming and life.", id: "https://ellpeck.de", link: "https://ellpeck.de", image: "https://ellpeck.de/res/logo.png", favicon: "https://ellpeck.de/favicon.ico", feedLinks: { json: "https://ellpeck.de/feed.json", atom: "https://ellpeck.de/atom.xml" }, author: { name: "Ellpeck", email: "me@ellpeck.de", link: "https://ellpeck.de" } }); fs.readFile(__dirname + "/../blog/posts.json", function (_, data) { let json = JSON.parse(data); for (let i = json.length - 1; i >= 0; i--) { let post = json[i]; let id = post["id"]; let date = new Date(post["date"]); fs.readFile(__dirname + "/../blog/" + id + ".md", function (_, content) { let html = converter.makeHtml(content.toString()); feed.addItem({ title: post["name"], link: "https://ellpeck.de/blog-" + id, description: post["summary"], content: html, date: date, published: date }); if (i == 0) { callback(feed); } }); } }); }