From 9727e4e9b8f857de45c4a6d717b16d8090f53c18 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Thu, 18 Sep 2025 22:47:02 +0800 Subject: [PATCH] fix(metadata): handle invalid language code and title when importing, closes #2056 and closes #2058 (#2064) --- apps/readest-app/src/hooks/useSync.ts | 1 + apps/readest-app/src/services/appService.ts | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/readest-app/src/hooks/useSync.ts b/apps/readest-app/src/hooks/useSync.ts index c4845bcc..7d822cfa 100644 --- a/apps/readest-app/src/hooks/useSync.ts +++ b/apps/readest-app/src/hooks/useSync.ts @@ -66,6 +66,7 @@ export function useSync(bookKey?: string) { useEffect(() => { setIsSyncing(bookKey || '', syncing); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [bookKey, syncing]); useEffect(() => { diff --git a/apps/readest-app/src/services/appService.ts b/apps/readest-app/src/services/appService.ts index 0141c3e1..9968bcfd 100644 --- a/apps/readest-app/src/services/appService.ts +++ b/apps/readest-app/src/services/appService.ts @@ -193,7 +193,8 @@ export abstract class BaseAppService implements AppService { ({ file: fileobj } = await txt2epub.convert({ file: fileobj })); } ({ book: loadedBook, format } = await new DocumentLoader(fileobj).open()); - if (!loadedBook.metadata.title) { + const metadataTitle = formatTitle(loadedBook.metadata.title); + if (!metadataTitle || !metadataTitle.trim()) { loadedBook.metadata.title = getBaseFilename(filename); } } catch (error) { @@ -211,13 +212,14 @@ export abstract class BaseAppService implements AppService { existingBook.updatedAt = Date.now(); } + const primaryLanguage = getPrimaryLanguage(loadedBook.metadata.language); const book: Book = { hash, format, title: formatTitle(loadedBook.metadata.title), sourceTitle: formatTitle(loadedBook.metadata.title), - author: formatAuthors(loadedBook.metadata.author, loadedBook.metadata.language), - primaryLanguage: getPrimaryLanguage(loadedBook.metadata.language), + primaryLanguage, + author: formatAuthors(loadedBook.metadata.author, primaryLanguage), createdAt: existingBook ? existingBook.createdAt : Date.now(), uploadedAt: existingBook ? existingBook.uploadedAt : null, deletedAt: transient ? Date.now() : null, @@ -227,7 +229,7 @@ export abstract class BaseAppService implements AppService { // update book metadata when reimporting the same book if (existingBook) { existingBook.format = book.format; - existingBook.title = existingBook.title ?? book.title; + existingBook.title = existingBook.title.trim() ? existingBook.title.trim() : book.title; existingBook.sourceTitle = existingBook.sourceTitle ?? book.sourceTitle; existingBook.author = existingBook.author ?? book.author; existingBook.primaryLanguage = existingBook.primaryLanguage ?? book.primaryLanguage;