From aad9b92342d0bef27c565f63a71df540a48641c3 Mon Sep 17 00:00:00 2001 From: Yusuf Suleman Date: Fri, 3 Apr 2026 20:01:40 -0500 Subject: [PATCH] fix: web dashboard Reader fetches article content on select Slim list mode means list responses no longer include content. Now selectArticle() fetches the full entry via GET /entries/{id} before displaying, then optionally crawls for full content if short. Also uses API thumbnail field instead of extracting from empty content. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../lib/pages/reader/AtelierReaderPage.svelte | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/frontend-v2/src/lib/pages/reader/AtelierReaderPage.svelte b/frontend-v2/src/lib/pages/reader/AtelierReaderPage.svelte index 49eb4c7..a235d21 100644 --- a/frontend-v2/src/lib/pages/reader/AtelierReaderPage.svelte +++ b/frontend-v2/src/lib/pages/reader/AtelierReaderPage.svelte @@ -62,7 +62,7 @@ return { id: e.id, title: e.title, feed: e.feed?.title || '', url: e.url, timeAgo: timeAgo(e.published_at), readingTime: `${e.reading_time || 1} min`, - content: e.content || '', thumbnail: extractThumb(e.content), + content: e.content || '', thumbnail: e.thumbnail || extractThumb(e.content), starred: e.starred || false, read: e.status === 'read', author: e.author || '' }; @@ -305,10 +305,25 @@ markEntryRead(article.id); decrementUnread(); } - // Auto-fetch full article content if we only have RSS summary - if (article.content && article.content.length < 1500) { - fetchFullContent(article); - } + // Fetch full entry content (slim list doesn't include it) + loadArticleContent(article); + } + + async function loadArticleContent(article: Article) { + try { + const data = await api(`/entries/${article.id}`); + const content = data.full_content || data.content || ''; + article.content = content; + if (data.thumbnail) article.thumbnail = data.thumbnail; + if (selectedArticle?.id === article.id) { + selectedArticle = { ...article }; + } + articles = [...articles]; + // If content is short, try fetching full article via crawler + if (content.length < 1500) { + fetchFullContent(article); + } + } catch { /* silent */ } } async function fetchFullContent(article: Article) {