diff options
| author | Dawid Rycerz <dawid@rycerz.xyz> | 2026-01-12 18:21:12 +0100 |
|---|---|---|
| committer | Dawid Rycerz <dawid@rycerz.xyz> | 2026-01-12 19:11:50 +0100 |
| commit | 51aa63873681216026d518cde4abeca307818a4b (patch) | |
| tree | d57b19a6ed8ce2b7303191a668de6ed7f878e7a8 /src/pages/micro/rss.xml.ts | |
| parent | 4ed3a82a8b8f111bed88559bf8d601bb7d947df9 (diff) | |
Add infinite posts downloads
Diffstat (limited to 'src/pages/micro/rss.xml.ts')
| -rw-r--r-- | src/pages/micro/rss.xml.ts | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/src/pages/micro/rss.xml.ts b/src/pages/micro/rss.xml.ts index ce25129..1fd6f53 100644 --- a/src/pages/micro/rss.xml.ts +++ b/src/pages/micro/rss.xml.ts @@ -1,8 +1,9 @@ import { getCollection } from "astro:content"; import rss from "@astrojs/rss"; +import type { APIContext } from "astro"; import { siteConfig } from "@/site.config"; -export const GET = async () => { +export const GET = async (context: APIContext) => { // Get only Pleroma posts const allMicro = await getCollection("micro").catch(() => []); // Fallback to empty array if micro collection fails @@ -11,15 +12,38 @@ export const GET = async () => { (a, b) => b.data.publishDate.getTime() - a.data.publishDate.getTime(), ); - return rss({ - title: siteConfig.title, - description: siteConfig.description, - site: import.meta.env.SITE, - items: allMicroPosts.map((post) => ({ + // Generate RSS items with full content and images + const items = allMicroPosts.map((post) => { + // Get the pre-rendered HTML from the post + let fullContent = post.rendered?.html || post.body || ""; + + // Append images if available + if (post.data.attachments && post.data.attachments.length > 0) { + const imagesHtml = post.data.attachments + .map( + (att: { url: string; type: string }) => + `<p><img src="${att.url}" alt="Attachment" style="max-width: 100%; height: auto;" /></p>`, + ) + .join(""); + fullContent += imagesHtml; + } + + return { title: post.data.title, pubDate: post.data.publishDate, link: `micro/${post.id}/`, description: post.data.description, - })), + content: fullContent, + }; + }); + + const site = context.site || import.meta.env.SITE; + + return rss({ + title: siteConfig.title, + description: siteConfig.description, + site, + items, + customData: `<atom:link href="${site}micro/rss.xml" rel="self" type="application/rss+xml" xmlns:atom="http://www.w3.org/2005/Atom" />`, }); }; |
