diff --git a/index.js b/index.js index f96a3a8..57bb71b 100644 --- a/index.js +++ b/index.js @@ -1,11 +1,3 @@ -// const fetch = require('node-fetch') -// const config = require('./config.js') -// const Path = require('path') -// const { writeFile } = require('fs/promises') - -// let cache = require('./cache.json') -// const { JSDOM } = require('jsdom') - import fetch from "node-fetch" import Path from "path" import FS from "fs/promises" @@ -47,8 +39,7 @@ const handleNitterUser = async user => { console.warn(`Failed to fetch ${user} from ${source}`) index++ } else { - console.error(err) - break + throw err } } } @@ -166,7 +157,7 @@ const processTumblr = (rss, user) => { const oneDay = 1000 * 60 * 60 * 24 -const printFeed = async (sources, directory, header, viewOptions) => { +const printFeed = async (sources, directory, header, viewOptions, error) => { // Coalate let feed = [] let tooLongAgo = viewOptions.tooLongAgo ? @@ -214,7 +205,15 @@ const printFeed = async (sources, directory, header, viewOptions) => { } if(pages.length == 0) { - writePage(0, renderPage('No posts', [], header, 'No posts available') ) + let message = 'No posts available' + + if(error) { + // Put in an iframe to prevent potential XSS through response body? Who knows. + message += `

+` + } + + writePage(0, renderPage('No posts', [], header, message) ) } return Promise.all(promises) @@ -291,8 +290,12 @@ ${footer} return html } -const renderImage = image => `\ -` +const renderImage = image => { + let { href } = new URL(image) + + return `\ +` +} const main = async () => { let promises = [] @@ -306,18 +309,20 @@ const main = async () => { let feed = config.feeds[feedName] let feedSources = [] - const subscribe = (postPromise, type, name) => - postPromise - .catch(error => console.error(error) ) + const subscribe = (postPromise, type, name) => { + let source = { type, name, link: Path.join(type, name) } + + return postPromise + .catch(error => { + source.error = error + console.error(error) + }) .then(posts => { feedSources.push(posts) - sources.push({ - type, - name, - link: Path.join(type, name), - posts - }) + source.posts = posts + sources.push(source) }) + } if(feed.nitter) { for(let user of feed.nitter) { @@ -354,8 +359,10 @@ const main = async () => { let link = buildLink(root + page.link + '/') let extra = '' - if(page.posts === undefined) { - extra += ' (missing)' + if(page.error) { + extra += ' (errored)' + } else if (page.posts.length == 0) { + extra += ' (empty)' } return `
  • ${name}${extra}
  • ` @@ -393,7 +400,7 @@ ${sources.map(source => renderEntry(source)).join('\n')} console.log('Writing...') for(let source of sources) { wait( - printFeed([ source.posts ], Path.join('out', source.link), navs[2], config.sourceView) + printFeed([ source.posts ], Path.join('out', source.link), navs[2], config.sourceView, source.error) ) } for(let feed of feeds) {