diff --git a/index.js b/index.js index 5253352..d2ce2fe 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,36 @@ import 'dotenv/config' import { items, linkFormat } from './config.js' -import { markdownCharEscape } from './utils.js' +import { + getAtomFeed, + getHardcoverActivity, + getJsonFeedItemTitle, + getLetterboxdActivity, + getListenBrainzScrobble, + getMastodonPost, + getRSSItemTitle, + getSourceTubeActivity, + getSteamRecentlyPlayed, + getTraktEpisode, + getTraktMovie, + htmlServiceLinkRegex, + markdownCharEscape, + markdownServiceLinkRegex, +} from './utils.js' + +const feedHandlers = { + rss: getRSSItemTitle, + atom: getAtomFeed, + json: getJsonFeedItemTitle, + 'source.tube': getSourceTubeActivity, + mastodon: getMastodonPost, + letterboxd: getLetterboxdActivity, + 'trakt-episode': getTraktEpisode, + 'trakt-movie': getTraktMovie, + steam: getSteamRecentlyPlayed, + listenbrainz: getListenBrainzScrobble, + hardcover: getHardcoverActivity, +} const OMGLOL_API = `https://api.omg.lol/address/${process.env.OMGLOL_USERNAME}/now` @@ -32,11 +61,24 @@ export default async function now() { let newNow = now await Promise.all( - items.map(async ({ id, regex, getLatest }) => { + items.map(async (item) => { try { - const latest = await getLatest() - console.log(`${id}: ${latest.text}`) - console.log(`${id} URL: ${latest.url}`) + const handler = feedHandlers[item.feedType] + if (!handler) { + throw new Error(`Unknown feedType: ${item.feedType}`) + } + + // build feedUrl from template if provided + let feedUrl = item.feedUrl + if (item.feedUrlTemplate) { + feedUrl = item.feedUrlTemplate + .replace('{userId}', item.userId || '') + .replace('{instance}', item.instance || '') + } + + const latest = await handler(feedUrl || { ...item, feedUrl }) + console.log(`${item.id}: ${latest.text}`) + console.log(`${item.id} URL: ${latest.url}`) // Apply markdown escaping only for markdown links const displayText = @@ -45,7 +87,13 @@ export default async function now() { : markdownCharEscape(latest.text) if (latest && latest.text && latest.url) { - newNow = newNow.replace(regex, (match, openTag, closeTag) => { + // generate regex based on id and linkFormat + const regex = + linkFormat === 'html' + ? htmlServiceLinkRegex(item.id) + : markdownServiceLinkRegex(item.id) + + newNow = newNow.replace(regex, (match, openTag, closeTag) => { // Replace href in opening tag const updatedOpenTag = openTag.replace( /href=["'][^"']*["']/,