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 'dotenv/config'
|
||||||
|
|
||||||
import { items, linkFormat } from './config.js'
|
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`
|
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
|
let newNow = now
|
||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
items.map(async ({ id, regex, getLatest }) => {
|
items.map(async (item) => {
|
||||||
try {
|
try {
|
||||||
const latest = await getLatest()
|
const handler = feedHandlers[item.feedType]
|
||||||
console.log(`${id}: ${latest.text}`)
|
if (!handler) {
|
||||||
console.log(`${id} URL: ${latest.url}`)
|
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
|
// Apply markdown escaping only for markdown links
|
||||||
const displayText =
|
const displayText =
|
||||||
|
|
@ -45,6 +87,12 @@ export default async function now() {
|
||||||
: markdownCharEscape(latest.text)
|
: markdownCharEscape(latest.text)
|
||||||
|
|
||||||
if (latest && latest.text && latest.url) {
|
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) => {
|
newNow = newNow.replace(regex, (match, openTag, closeTag) => {
|
||||||
// Replace href in opening tag
|
// Replace href in opening tag
|
||||||
const updatedOpenTag = openTag.replace(
|
const updatedOpenTag = openTag.replace(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue