From 0549a6175332f0b3427b6131995cd8f1953744e1 Mon Sep 17 00:00:00 2001 From: Satsuki Akiba Date: Sat, 7 Jun 2025 22:53:52 +0900 Subject: [PATCH] Update --- frontend/src/components/EpisodeList.tsx | 15 ++++++++++----- server.ts | 14 ++++++++++++-- services/database.ts | 10 ---------- services/podcast.ts | 12 +++++++++--- 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/frontend/src/components/EpisodeList.tsx b/frontend/src/components/EpisodeList.tsx index 0049555..12706cc 100644 --- a/frontend/src/components/EpisodeList.tsx +++ b/frontend/src/components/EpisodeList.tsx @@ -10,6 +10,11 @@ interface Episode { audioLength: string guid: string link: string + feedTitle?: string + feedUrl?: string + articleTitle?: string + articleLink?: string + articlePubDate?: string } interface EpisodeWithFeedInfo { @@ -81,12 +86,12 @@ function EpisodeList() { audioPath: episode.audioUrl, createdAt: episode.pubDate, articleId: episode.guid, - articleTitle: episode.title, - articleLink: episode.link, - articlePubDate: episode.pubDate, + articleTitle: episode.articleTitle || episode.title, + articleLink: episode.articleLink || episode.link, + articlePubDate: episode.articlePubDate || episode.pubDate, feedId: '', - feedTitle: 'RSS Feed', - feedUrl: '' + feedTitle: episode.feedTitle || 'RSS Feed', + feedUrl: episode.feedUrl || '' })) setEpisodes(convertedEpisodes) } diff --git a/server.ts b/server.ts index f2e6cee..ba1e3bc 100644 --- a/server.ts +++ b/server.ts @@ -147,7 +147,12 @@ app.get("/api/episodes-from-xml", async (c) => { audioUrl: item.enclosure?.[0]?.$?.url || '', audioLength: item.enclosure?.[0]?.$?.length || '0', guid: item.guid?.[0] || '', - link: item.link?.[0] || '' + link: item.link?.[0] || '', + feedTitle: item['source:feedTitle']?.[0] || '', + feedUrl: item['source:feedUrl']?.[0] || '', + articleTitle: item['source:articleTitle']?.[0] || '', + articleLink: item['source:articleLink']?.[0] || '', + articlePubDate: item['source:articlePubDate']?.[0] || '' }; episodes.push(episode); } @@ -209,7 +214,12 @@ app.get("/api/episode/:episodeId", async (c) => { audioUrl: targetItem.enclosure?.[0]?.$?.url || '', audioLength: targetItem.enclosure?.[0]?.$?.length || '0', guid: targetItem.guid?.[0] || '', - link: targetItem.link?.[0] || '' + link: targetItem.link?.[0] || '', + feedTitle: targetItem['source:feedTitle']?.[0] || '', + feedUrl: targetItem['source:feedUrl']?.[0] || '', + articleTitle: targetItem['source:articleTitle']?.[0] || '', + articleLink: targetItem['source:articleLink']?.[0] || '', + articlePubDate: targetItem['source:articlePubDate']?.[0] || '' }; return c.json({ episode }); diff --git a/services/database.ts b/services/database.ts index e96124a..14b30cc 100644 --- a/services/database.ts +++ b/services/database.ts @@ -722,16 +722,6 @@ export async function saveEpisode( createdAt, ); - try { - performDatabaseIntegrityFixes(db); - console.log(`Episode saved: ${episode}`); - } catch (error) { - console.error( - "Error performing integrity fixes after saving feed:", - error, - ); - } - return id; } catch (error) { console.error("Error saving episode:", error); diff --git a/services/podcast.ts b/services/podcast.ts index 1c4cacc..3104eac 100644 --- a/services/podcast.ts +++ b/services/podcast.ts @@ -3,6 +3,7 @@ import { dirname } from "path"; import { Episode, fetchAllEpisodes, + fetchEpisodesWithFeedInfo, performDatabaseIntegrityFixes, } from "./database.js"; import path from "node:path"; @@ -18,7 +19,7 @@ function escapeXml(text: string): string { .replace(/'/g, "'"); } -function createItemXml(episode: Episode): string { +function createItemXml(episode: any): string { const fileUrl = `${config.podcast.baseUrl}/podcast_audio/${path.basename(episode.audioPath)}`; const pubDate = new Date(episode.createdAt).toUTCString(); @@ -46,12 +47,17 @@ function createItemXml(episode: Episode): string { ${escapeXml(fileUrl)} ${pubDate} + + ${escapeXml(episode.feedUrl || '')} + + ${escapeXml(episode.articleLink || '')} + ${episode.articlePubDate || ''} `; } export async function updatePodcastRSS(): Promise { try { - const episodes: Episode[] = await fetchAllEpisodes(); + const episodes = await fetchEpisodesWithFeedInfo(); // Filter episodes to only include those with valid audio files const validEpisodes = episodes.filter((episode) => { @@ -77,7 +83,7 @@ export async function updatePodcastRSS(): Promise { // Create RSS XML content const rssXml = ` - + ${escapeXml(config.podcast.title)} ${escapeXml(config.podcast.link)}