Fix episode list
This commit is contained in:
@ -8,6 +8,7 @@ import {
|
|||||||
deleteFeed,
|
deleteFeed,
|
||||||
toggleFeedActive,
|
toggleFeedActive,
|
||||||
getFeedByUrl,
|
getFeedByUrl,
|
||||||
|
getFeedById,
|
||||||
fetchAllEpisodes,
|
fetchAllEpisodes,
|
||||||
fetchEpisodesWithArticles,
|
fetchEpisodesWithArticles,
|
||||||
getFeedRequests,
|
getFeedRequests,
|
||||||
|
@ -27,10 +27,15 @@ function EpisodeList() {
|
|||||||
try {
|
try {
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
const response = await fetch('/api/episodes')
|
const response = await fetch('/api/episodes')
|
||||||
if (!response.ok) throw new Error('エピソードの取得に失敗しました')
|
if (!response.ok) {
|
||||||
|
const errorData = await response.json()
|
||||||
|
throw new Error(errorData.error || 'エピソードの取得に失敗しました')
|
||||||
|
}
|
||||||
const data = await response.json()
|
const data = await response.json()
|
||||||
|
console.log('Fetched episodes:', data)
|
||||||
setEpisodes(data)
|
setEpisodes(data)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.error('Episode fetch error:', err)
|
||||||
setError(err instanceof Error ? err.message : 'エラーが発生しました')
|
setError(err instanceof Error ? err.message : 'エラーが発生しました')
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
@ -64,7 +69,14 @@ function EpisodeList() {
|
|||||||
return (
|
return (
|
||||||
<div className="empty-state">
|
<div className="empty-state">
|
||||||
<p>エピソードがありません</p>
|
<p>エピソードがありません</p>
|
||||||
<p>フィード管理でRSSフィードを追加してください</p>
|
<p>フィードリクエストでRSSフィードをリクエストするか、管理者にバッチ処理の実行を依頼してください</p>
|
||||||
|
<button
|
||||||
|
className="btn btn-secondary"
|
||||||
|
onClick={fetchEpisodes}
|
||||||
|
style={{ marginTop: '10px' }}
|
||||||
|
>
|
||||||
|
再読み込み
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import { generateTTS } from "../services/tts.js";
|
|||||||
import {
|
import {
|
||||||
saveFeed,
|
saveFeed,
|
||||||
getFeedByUrl,
|
getFeedByUrl,
|
||||||
|
getFeedById,
|
||||||
saveArticle,
|
saveArticle,
|
||||||
getUnprocessedArticles,
|
getUnprocessedArticles,
|
||||||
markArticleAsProcessed,
|
markArticleAsProcessed,
|
||||||
@ -294,7 +295,7 @@ async function generatePodcastForArticle(article: any): Promise<void> {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// Get feed information for context
|
// Get feed information for context
|
||||||
const feed = await getFeedByUrl(article.feedId);
|
const feed = await getFeedById(article.feedId);
|
||||||
const feedTitle = feed?.title || "Unknown Feed";
|
const feedTitle = feed?.title || "Unknown Feed";
|
||||||
|
|
||||||
// Classify the article/feed
|
// Classify the article/feed
|
||||||
|
@ -193,6 +193,27 @@ export async function getFeedByUrl(url: string): Promise<Feed | null> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getFeedById(id: string): Promise<Feed | null> {
|
||||||
|
try {
|
||||||
|
const stmt = db.prepare("SELECT * FROM feeds WHERE id = ?");
|
||||||
|
const row = stmt.get(id) as any;
|
||||||
|
if (!row) return null;
|
||||||
|
|
||||||
|
return {
|
||||||
|
id: row.id,
|
||||||
|
url: row.url,
|
||||||
|
title: row.title,
|
||||||
|
description: row.description,
|
||||||
|
lastUpdated: row.last_updated,
|
||||||
|
createdAt: row.created_at,
|
||||||
|
active: Boolean(row.active),
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error getting feed by ID:", error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export async function getAllFeeds(): Promise<Feed[]> {
|
export async function getAllFeeds(): Promise<Feed[]> {
|
||||||
try {
|
try {
|
||||||
const stmt = db.prepare(
|
const stmt = db.prepare(
|
||||||
|
Reference in New Issue
Block a user