Update category management and RSS endpoint handling
This commit is contained in:
@ -14,6 +14,7 @@ import {
|
||||
} from "../services/database.js";
|
||||
import {
|
||||
openAI_ClassifyFeed,
|
||||
openAI_ClassifyEpisode,
|
||||
openAI_GeneratePodcastContent,
|
||||
} from "../services/llm.js";
|
||||
import { updatePodcastRSS } from "../services/podcast.js";
|
||||
@ -352,7 +353,7 @@ async function processRetryQueue(abortSignal?: AbortSignal): Promise<void> {
|
||||
await updateQueueItemStatus(item.id, "processing");
|
||||
|
||||
// Attempt TTS generation without re-queuing on failure
|
||||
const audioFilePath = await generateTTSWithoutQueue(
|
||||
await generateTTSWithoutQueue(
|
||||
item.itemId,
|
||||
item.scriptText,
|
||||
item.retryCount,
|
||||
@ -448,25 +449,13 @@ async function generatePodcastForArticle(
|
||||
}
|
||||
|
||||
// Get feed information for context
|
||||
const feed = await getFeedById(article.feedId);
|
||||
const feedTitle = feed?.title || "Unknown Feed";
|
||||
await getFeedById(article.feedId);
|
||||
|
||||
// Check for cancellation before classification
|
||||
if (abortSignal?.aborted) {
|
||||
throw new Error("Podcast generation was cancelled");
|
||||
}
|
||||
|
||||
// Classify the article/feed
|
||||
const category = await openAI_ClassifyFeed(
|
||||
`${feedTitle}: ${article.title}`,
|
||||
);
|
||||
console.log(`🏷️ Article classified as: ${category}`);
|
||||
|
||||
// Check for cancellation before content generation
|
||||
if (abortSignal?.aborted) {
|
||||
throw new Error("Podcast generation was cancelled");
|
||||
}
|
||||
|
||||
// Enhance article content with web scraping if needed
|
||||
console.log(`🔍 Enhancing content for: ${article.title}`);
|
||||
const enhancedContent = await enhanceArticleContent(
|
||||
@ -476,6 +465,11 @@ async function generatePodcastForArticle(
|
||||
article.description,
|
||||
);
|
||||
|
||||
// Check for cancellation before content generation
|
||||
if (abortSignal?.aborted) {
|
||||
throw new Error("Podcast generation was cancelled");
|
||||
}
|
||||
|
||||
// Generate podcast content for this single article
|
||||
const podcastContent = await openAI_GeneratePodcastContent(article.title, [
|
||||
{
|
||||
@ -486,6 +480,15 @@ async function generatePodcastForArticle(
|
||||
},
|
||||
]);
|
||||
|
||||
// Classify the episode based on the podcast content
|
||||
console.log(`🏷️ Classifying episode content for: ${article.title}`);
|
||||
const episodeCategory = await openAI_ClassifyEpisode(
|
||||
article.title,
|
||||
enhancedContent.description,
|
||||
enhancedContent.content,
|
||||
);
|
||||
console.log(`🏷️ Episode classified as: ${episodeCategory}`);
|
||||
|
||||
// Check for cancellation before TTS
|
||||
if (abortSignal?.aborted) {
|
||||
throw new Error("Podcast generation was cancelled");
|
||||
@ -544,12 +547,13 @@ async function generatePodcastForArticle(
|
||||
try {
|
||||
await saveEpisode({
|
||||
articleId: article.id,
|
||||
title: `${category}: ${article.title}`,
|
||||
title: article.title,
|
||||
description:
|
||||
article.description || `Podcast episode for: ${article.title}`,
|
||||
audioPath: audioFilePath,
|
||||
duration: audioStats.duration,
|
||||
fileSize: audioStats.size,
|
||||
category: episodeCategory,
|
||||
});
|
||||
|
||||
console.log(`💾 Episode saved for article: ${article.title}`);
|
||||
|
Reference in New Issue
Block a user