From f100d259d2ffebe61fef56ea3964f6d534d598c8 Mon Sep 17 00:00:00 2001 From: Dawid Rycerz Date: Thu, 3 Jul 2025 13:46:07 +0300 Subject: Initial pleroma pull support --- src/pages/micro/[...page].astro | 23 +++++++++++++++++------ src/pages/micro/[...slug].astro | 18 ++++++++++++------ src/pages/micro/rss.xml.ts | 22 ++++++++++++++++------ 3 files changed, 45 insertions(+), 18 deletions(-) (limited to 'src/pages/micro') diff --git a/src/pages/micro/[...page].astro b/src/pages/micro/[...page].astro index 08f5fd3..b4e3e07 100644 --- a/src/pages/micro/[...page].astro +++ b/src/pages/micro/[...page].astro @@ -1,20 +1,31 @@ --- import { type CollectionEntry, getCollection } from "astro:content"; -import Pagination from "@/components/Paginator.astro"; +import type { GetStaticPaths, Page } from "astro"; +import { Icon } from "astro-icon/components"; import Note from "@/components/note/Note.astro"; +import Pagination from "@/components/Paginator.astro"; import PageLayout from "@/layouts/Base.astro"; import { collectionDateSort } from "@/utils/date"; -import type { GetStaticPaths, Page } from "astro"; -import { Icon } from "astro-icon/components"; export const getStaticPaths = (async ({ paginate }) => { const MAX_MICRO_PER_PAGE = 10; - const allMicro = await getCollection("note"); - return paginate(allMicro.sort(collectionDateSort), { pageSize: MAX_MICRO_PER_PAGE }); + + // Get both local notes and Pleroma posts + const [allNotes, allMicro] = await Promise.all([ + getCollection("note"), + getCollection("micro").catch(() => []), // Fallback to empty array if micro collection fails + ]); + + // Combine and sort all micro posts + const allMicroPosts = [...allNotes, ...allMicro].sort( + (a, b) => b.data.publishDate.getTime() - a.data.publishDate.getTime(), + ); + + return paginate(allMicroPosts, { pageSize: MAX_MICRO_PER_PAGE }); }) satisfies GetStaticPaths; interface Props { - page: Page>; + page: Page | CollectionEntry<"micro">>; uniqueTags: string[]; } diff --git a/src/pages/micro/[...slug].astro b/src/pages/micro/[...slug].astro index 2ce847d..54f6234 100644 --- a/src/pages/micro/[...slug].astro +++ b/src/pages/micro/[...slug].astro @@ -1,16 +1,22 @@ --- import { getCollection } from "astro:content"; - +import type { GetStaticPaths, InferGetStaticPropsType } from "astro"; import Note from "@/components/note/Note.astro"; import PageLayout from "@/layouts/Base.astro"; -import type { GetStaticPaths, InferGetStaticPropsType } from "astro"; // if you're using an adaptor in SSR mode, getStaticPaths wont work -> https://docs.astro.build/en/guides/routing/#modifying-the-slug-example-for-ssr export const getStaticPaths = (async () => { - const allNotes = await getCollection("note"); - return allNotes.map((note) => ({ - params: { slug: note.id }, - props: { note }, + // Get both local notes and Pleroma posts + const [allNotes, allMicro] = await Promise.all([ + getCollection("note"), + getCollection("micro").catch(() => []), // Fallback to empty array if micro collection fails + ]); + + const allPosts = [...allNotes, ...allMicro]; + + return allPosts.map((post) => ({ + params: { slug: post.id }, + props: { note: post }, // Keep 'note' name for compatibility with existing component })); }) satisfies GetStaticPaths; diff --git a/src/pages/micro/rss.xml.ts b/src/pages/micro/rss.xml.ts index 7311319..0827ccb 100644 --- a/src/pages/micro/rss.xml.ts +++ b/src/pages/micro/rss.xml.ts @@ -1,18 +1,28 @@ import { getCollection } from "astro:content"; -import { siteConfig } from "@/site.config"; import rss from "@astrojs/rss"; +import { siteConfig } from "@/site.config"; export const GET = async () => { - const micro = await getCollection("note"); + // Get both local notes and Pleroma posts + const [allNotes, allMicro] = await Promise.all([ + getCollection("note"), + getCollection("micro").catch(() => []), // Fallback to empty array if micro collection fails + ]); + + // Combine and sort all micro posts + const allMicroPosts = [...allNotes, ...allMicro].sort( + (a, b) => b.data.publishDate.getTime() - a.data.publishDate.getTime(), + ); return rss({ title: siteConfig.title, description: siteConfig.description, site: import.meta.env.SITE, - items: micro.map((note) => ({ - title: note.data.title, - pubDate: note.data.publishDate, - link: `micro/${note.id}/`, + items: allMicroPosts.map((post) => ({ + title: post.data.title, + pubDate: post.data.publishDate, + link: `micro/${post.id}/`, + description: post.data.description, })), }); }; -- cgit v1.2.3