From fdb39d2159f112c6454184a4b9b164f3b3c06117 Mon Sep 17 00:00:00 2001 From: dylan Date: Thu, 25 Dec 2025 18:30:27 +0000 Subject: [PATCH] updated getRSSItemTitle, getJsonFeedItemTitle, getLetterboxdActivity, getTraktEpisode, and getTraktMovie to return structured objects with text and a direct link to the content --- utils.js | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/utils.js b/utils.js index c9fd645..2934128 100644 --- a/utils.js +++ b/utils.js @@ -41,24 +41,28 @@ export async function getRSSItemTitle(feedUrl) { const dom = new JSDOM(data) const item = dom.window.document.querySelector('item') const title = item.querySelector('title').textContent - return markdownCharEscape( + const link = item.querySelector('link').textContent + const cleanTitle = markdownCharEscape( sanitizeHtml(title, { allowedTags: [], allowedAttributes: {}, })?.trim(), ) + return { text: cleanTitle, url: link } } export async function getJsonFeedItemTitle(feedUrl, showImage = true) { const res = await fetch(feedUrl) const data = await res.json() const post = data.items[0] - const { title, image } = post + const { title, image, url } = post const cleanTitle = markdownCharEscape(title) - if (!showImage) { - return cleanTitle - } - return image ? `${cleanTitle} ![${cleanTitle}](${image})` : cleanTitle + const text = !showImage + ? cleanTitle + : image + ? `${cleanTitle} ![${cleanTitle}](${image})` + : cleanTitle + return { text, url } } export async function getJsonFeedItemContent(feedUrl, showImage = true) { @@ -96,12 +100,13 @@ export async function getLetterboxdActivity(username, showImage = true) { const dom = new JSDOM(data) const item = dom.window.document.querySelector('item') const title = item.querySelector('title').textContent + const link = item.querySelector('link').textContent const cleanTitle = markdownCharEscape(title) const image = item.querySelector('description > img').src - if (!showImage) { - return cleanTitle - } - return `${cleanTitle} ![${cleanTitle}](${image})` + const text = !showImage + ? cleanTitle + : `${cleanTitle} ![${cleanTitle}](${image})` + return { text, url: link } } export async function getTraktEpisode(username, id, showImage = true) { @@ -112,11 +117,12 @@ export async function getTraktEpisode(username, id, showImage = true) { const dom = new JSDOM(data) const entry = dom.window.document.querySelector('entry') const title = entry.querySelector('title').textContent + const link = entry.querySelector('link').getAttribute('href') const cleanTitle = markdownCharEscape(title) - if (!showImage) { - return cleanTitle - } - return `${cleanTitle} ![${cleanTitle}](https://widgets.trakt.tv/users/${id}/watched/thumb@2x.jpg?type=episode&image_only=1)` + const text = !showImage + ? cleanTitle + : `${cleanTitle} ![${cleanTitle}](https://widgets.trakt.tv/users/${id}/watched/thumb@2x.jpg?type=episode&image_only=1)` + return { text, url: link } } export async function getTraktMovie(username, showImage = true) { @@ -127,13 +133,17 @@ export async function getTraktMovie(username, showImage = true) { const dom = new JSDOM(data) const entry = dom.window.document.querySelector('entry') const title = entry.querySelector('title').textContent - return markdownCharEscape(title) + const link = entry.querySelector('link').getAttribute('href') + return { text: markdownCharEscape(title), url: link } } export async function getTraktEpisodeAndMovie(username, id, showImage = true) { const episode = await getTraktEpisode(username, id, showImage) const movie = await getTraktMovie(username, showImage) - return `${episode}
and
${movie}` + return { + text: `${episode.text}
and
${movie.text}`, + url: `https://trakt.tv/users/${username}`, + } } export async function getReadingBooklogr(booklogrUrl, booklogrUser) {