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)}