From 7cb523eefcd33b672fe75f65b15110ab97206c79 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Fri, 9 Jan 2026 15:58:01 +0100 Subject: [PATCH] fix(metadata): no need to download book to display book details, closes #2857 (#2897) --- .../app/library/components/BookshelfItem.tsx | 4 +--- .../components/metadata/BookDetailModal.tsx | 21 +++++------------- .../components/metadata/BookDetailView.tsx | 22 +++++++++++-------- .../components/metadata/SourceSelector.tsx | 2 +- 4 files changed, 20 insertions(+), 29 deletions(-) diff --git a/apps/readest-app/src/app/library/components/BookshelfItem.tsx b/apps/readest-app/src/app/library/components/BookshelfItem.tsx index 315dfa43..f1311aa8 100644 --- a/apps/readest-app/src/app/library/components/BookshelfItem.tsx +++ b/apps/readest-app/src/app/library/components/BookshelfItem.tsx @@ -115,9 +115,7 @@ const BookshelfItem: React.FC = ({ const { updateBook } = useLibraryStore(); const showBookDetailsModal = useCallback(async (book: Book) => { - if (await makeBookAvailable(book)) { - handleShowDetailsBook(book); - } + handleShowDetailsBook(book); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); diff --git a/apps/readest-app/src/components/metadata/BookDetailModal.tsx b/apps/readest-app/src/components/metadata/BookDetailModal.tsx index 35a6ee15..983fc3e4 100644 --- a/apps/readest-app/src/components/metadata/BookDetailModal.tsx +++ b/apps/readest-app/src/components/metadata/BookDetailModal.tsx @@ -10,7 +10,6 @@ import { useMetadataEdit } from './useMetadataEdit'; import { DeleteAction } from '@/types/system'; import Alert from '@/components/Alert'; import Dialog from '@/components/Dialog'; -import Spinner from '@/components/Spinner'; import BookDetailView from './BookDetailView'; import BookDetailEdit from './BookDetailEdit'; import SourceSelector from './SourceSelector'; @@ -47,7 +46,6 @@ const BookDetailModal: React.FC = ({ const _ = useTranslation(); const { envConfig } = useEnv(); const { safeAreaInsets } = useThemeStore(); - const [loading, setLoading] = useState(false); const [activeDeleteAction, setActiveDeleteAction] = useState(null); const [editMode, setEditMode] = useState(false); const [bookMeta, setBookMeta] = useState(null); @@ -91,17 +89,17 @@ const BookDetailModal: React.FC = ({ }; useEffect(() => { - const loadingTimeout = setTimeout(() => setLoading(true), 300); const fetchBookDetails = async () => { const appService = await envConfig.getAppService(); try { - const details = book.metadata || (await appService.fetchBookDetails(book)); + let details = book.metadata || null; + if (!details && book.downloadedAt) { + details = await appService.fetchBookDetails(book); + } setBookMeta(details); const size = await appService.getBookFileSize(book); setFileSize(size); } finally { - if (loadingTimeout) clearTimeout(loadingTimeout); - setLoading(false); } }; fetchBookDetails(); @@ -171,15 +169,6 @@ const BookDetailModal: React.FC = ({ const currentDeleteConfig = activeDeleteAction ? deleteConfigs[activeDeleteAction] : null; - if (!bookMeta) - return ( - loading && ( -
- -
- ) - ); - return ( <>
@@ -194,7 +183,7 @@ const BookDetailModal: React.FC = ({ contentClassName='!px-6 !py-4' >
- {editMode ? ( + {editMode && bookMeta ? ( void; onDelete?: () => void; @@ -64,8 +64,12 @@ const BookDetailView: React.FC = ({
{onEdit && ( - )} {onDelete && ( @@ -123,13 +127,13 @@ const BookDetailView: React.FC = ({
{_('Publisher')}

- {formatPublisher(metadata.publisher || '') || _('Unknown')} + {formatPublisher(metadata?.publisher || '') || _('Unknown')}

{_('Published')}

- {formatDate(metadata.published, true) || _('Unknown')} + {formatDate(metadata?.published, true) || _('Unknown')}

@@ -143,13 +147,13 @@ const BookDetailView: React.FC = ({
{_('Language')}

- {formatLanguage(metadata.language) || _('Unknown')} + {formatLanguage(metadata?.language) || _('Unknown')}

{_('Subjects')}

- {formatAuthors(metadata.subject || '') || _('Unknown')} + {formatAuthors(metadata?.subject || '') || _('Unknown')}

@@ -164,9 +168,9 @@ const BookDetailView: React.FC = ({
{_('Description')}

diff --git a/apps/readest-app/src/components/metadata/SourceSelector.tsx b/apps/readest-app/src/components/metadata/SourceSelector.tsx index 5376f17e..86416c88 100644 --- a/apps/readest-app/src/components/metadata/SourceSelector.tsx +++ b/apps/readest-app/src/components/metadata/SourceSelector.tsx @@ -57,7 +57,7 @@ const SourceSelector: React.FC = ({ sources, isOpen, onSele tabIndex={0} key={index} onClick={() => onSelect(source)} - className='hover:bg-base-300/75 bg-base-200 border-base-200 cursor-pointer rounded-md border p-3 transition-colors' + className='hover:bg-base-300/75 bg-base-200 border-base-200 w-full cursor-pointer rounded-md border p-3 transition-colors' >