updated feed handling to use dedicated handlers for each feed type
This commit is contained in:
parent
b3b8658b72
commit
385f24a28a
1 changed files with 54 additions and 6 deletions
58
index.js
58
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,6 +87,12 @@ export default async function now() {
|
|||
: markdownCharEscape(latest.text)
|
||||
|
||||
if (latest && latest.text && latest.url) {
|
||||
// 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(
|
||||
|
|
|
|||
Loading…
Reference in a new issue