From 22b0d2d5e64557ea594df132ae1ef8f52888119d Mon Sep 17 00:00:00 2001 From: DIYgod Date: Wed, 17 May 2023 00:41:37 +0100 Subject: [PATCH] fix: html content in feed --- src/app/feed/hottest/route.ts | 2 ++ src/app/feed/latest/route.ts | 2 ++ src/app/site/[site]/feed/route.ts | 3 ++- src/lib/expand-unit.ts | 23 +++++++++++----- src/lib/json-feed.ts | 1 + src/lib/types.ts | 1 + src/models/home.model.ts | 44 +++++++++++++++++++++++-------- src/models/page.model.ts | 20 +++++++++++--- 8 files changed, 75 insertions(+), 21 deletions(-) diff --git a/src/app/feed/hottest/route.ts b/src/app/feed/hottest/route.ts index 672dc679..3db94feb 100644 --- a/src/app/feed/hottest/route.ts +++ b/src/app/feed/hottest/route.ts @@ -10,6 +10,8 @@ export async function GET(request: Request) { const feed = await getFeed({ type: "hot", daysInterval: parseInt(searchParams.get("interval") || "0"), + useHTML: true, + limit: 10, }) const data = { diff --git a/src/app/feed/latest/route.ts b/src/app/feed/latest/route.ts index 8c692b61..fd2534fe 100644 --- a/src/app/feed/latest/route.ts +++ b/src/app/feed/latest/route.ts @@ -7,6 +7,8 @@ import { getFeed } from "~/models/home.model" export async function GET(request: Request) { const feed = await getFeed({ type: "latest", + useHTML: true, + limit: 10, }) const data = { diff --git a/src/app/site/[site]/feed/route.ts b/src/app/site/[site]/feed/route.ts index c0b7de30..f95519a9 100644 --- a/src/app/site/[site]/feed/route.ts +++ b/src/app/site/[site]/feed/route.ts @@ -21,6 +21,7 @@ export async function GET( type: "post", visibility: PageVisibilityEnum.Published, keepBody: true, + useHTML: true, }) const hasAudio = pages.list?.find((page) => page.metadata?.content?.audio) @@ -47,7 +48,7 @@ export async function GET( id: page.characterId + "-" + page.noteId, title: page.metadata?.content?.title, summary: page.metadata?.content?.summary, - content_html: page.metadata?.content?.content, + content_html: page.metadata?.content?.contentHTML, url: `${SITE_URL}/api/redirection?characterId=${page.characterId}¬eId=${page.noteId}`, image: page.metadata?.content?.cover, date_published: page.metadata?.content?.date_published, diff --git a/src/lib/expand-unit.ts b/src/lib/expand-unit.ts index 7b48101e..614df568 100644 --- a/src/lib/expand-unit.ts +++ b/src/lib/expand-unit.ts @@ -7,12 +7,19 @@ import { ExpandedCharacter, ExpandedNote } from "~/lib/types" import { getNoteSlug } from "./helpers" -export const expandCrossbellNote = async ( - note: NoteEntity, - useStat?: boolean, - useScore?: boolean, - keyword?: string, -) => { +export const expandCrossbellNote = async ({ + note, + useStat, + useScore, + keyword, + useHTML, +}: { + note: NoteEntity + useStat?: boolean + useScore?: boolean + keyword?: string + useHTML?: boolean +}) => { const expandedNote: ExpandedNote = Object.assign( { metadata: { @@ -45,6 +52,10 @@ export const expandCrossbellNote = async ( expandedNote.metadata.content.cover = rendered.cover expandedNote.metadata.content.audio = rendered.audio expandedNote.metadata.content.frontMatter = rendered.frontMatter + + if (useHTML) { + expandedNote.metadata.content.contentHTML = rendered.contentHTML + } } expandedNote.metadata.content.slug = getNoteSlug(expandedNote) expandedNote.metadata.content.date_published = diff --git a/src/lib/json-feed.ts b/src/lib/json-feed.ts index 0d2e464e..e6307b07 100644 --- a/src/lib/json-feed.ts +++ b/src/lib/json-feed.ts @@ -15,6 +15,7 @@ export const parsePost = (post: ExpandedNote, withTwitter?: boolean) => { withTwitter && twitter ? ` by @${twitter}` : "" }`, summary: post.metadata?.content?.summary, + content_html: post.metadata?.content?.contentHTML, url: `${SITE_URL}/api/redirection?characterId=${post.characterId}¬eId=${post.noteId}`, image: post.metadata?.content?.cover, date_published: post.createdAt, diff --git a/src/lib/types.ts b/src/lib/types.ts index 40ea7028..9bc3ff48 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -86,6 +86,7 @@ export type ExpandedNote = NoteEntity & { number?: number reason?: string } + contentHTML?: string } } stat?: { diff --git a/src/models/home.model.ts b/src/models/home.model.ts index e62c96a4..3bc3f41f 100644 --- a/src/models/home.model.ts +++ b/src/models/home.model.ts @@ -27,6 +27,7 @@ export async function getFeed({ searchKeyword, searchType, tag, + useHTML, }: { type?: FeedType cursor?: string @@ -37,6 +38,7 @@ export async function getFeed({ searchKeyword?: string searchType?: SearchType tag?: string + useHTML?: boolean }) { if (type === "search" && !searchKeyword) { type = "latest" @@ -57,7 +59,12 @@ export async function getFeed({ const list = await Promise.all( result.list.map(async (page: any) => { - const expand = await expandCrossbellNote(page, false, true) + const expand = await expandCrossbellNote({ + note: page, + useStat: false, + useScore: true, + useHTML, + }) delete expand.metadata?.content.content return expand }), @@ -87,7 +94,10 @@ export async function getFeed({ const list = await Promise.all( result.list.map(async (page: any) => { - const expand = await expandCrossbellNote(page) + const expand = await expandCrossbellNote({ + note: page, + useHTML, + }) delete expand.metadata?.content.content return expand }), @@ -155,7 +165,10 @@ export async function getFeed({ const list = await Promise.all( result?.data?.notes.map(async (page: any) => { - const expand = await expandCrossbellNote(page) + const expand = await expandCrossbellNote({ + note: page, + useHTML, + }) delete expand.metadata?.content.content return expand }), @@ -221,7 +234,10 @@ export async function getFeed({ page.stat.viewDetailCount / Math.max(Math.log10(secondAgo), 1) } - const expand = await expandCrossbellNote(page) + const expand = await expandCrossbellNote({ + note: page, + useHTML, + }) delete expand.metadata?.content.content return expand }), @@ -255,12 +271,13 @@ export async function getFeed({ const list = await Promise.all( result.list.map(async (page: any) => { - const expand = await expandCrossbellNote( - page, - false, - false, - searchKeyword, - ) + const expand = await expandCrossbellNote({ + note: page, + useStat: false, + useScore: false, + keyword: searchKeyword, + useHTML, + }) delete expand.metadata?.content.content return expand }), @@ -295,7 +312,12 @@ export async function getFeed({ const list = await Promise.all( result.list.map(async (page: any) => { - const expand = await expandCrossbellNote(page, false, true) + const expand = await expandCrossbellNote({ + note: page, + useStat: false, + useScore: true, + useHTML, + }) delete expand.metadata?.content.content return expand }), diff --git a/src/models/page.model.ts b/src/models/page.model.ts index 899f368b..e653b9cf 100644 --- a/src/models/page.model.ts +++ b/src/models/page.model.ts @@ -220,6 +220,7 @@ export async function getPagesBySite(input: { cursor?: string tags?: string[] useStat?: boolean + useHTML?: boolean keepBody?: boolean handle?: string // In order to be compatible with old drafts }) { @@ -244,7 +245,12 @@ export async function getPagesBySite(input: { const list = await Promise.all( notes?.list.map(async (note) => { - const expanded = await expandCrossbellNote(note, input.useStat) + const expanded = await expandCrossbellNote({ + note, + useStat: input.useStat, + useHTML: input.useHTML, + useScore: false, + }) if (!input.keepBody) { delete expanded.metadata?.content?.content } @@ -336,7 +342,12 @@ export async function getSearchPagesBySite(input: { const list: ExpandedNote[] = await Promise.all( result.list.map(async (page: any) => { - return await expandCrossbellNote(page, true, false, input.keyword) + return await expandCrossbellNote({ + note: page, + useStat: true, + useScore: false, + keyword: input.keyword, + }) }), ) @@ -390,7 +401,10 @@ export async function getPage(input: { let expandedNote: ExpandedNote | undefined if (page) { - expandedNote = await expandCrossbellNote(page, input.useStat) + expandedNote = await expandCrossbellNote({ + note: page, + useStat: input.useStat, + }) } if (localPage) {