From ed68d25b156a2bf1ee7f6b7d43c983a7f462f815 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Sun, 15 Jun 2025 22:07:51 +0800 Subject: [PATCH] fix: restore full view settings when reopening book (#1400) --- .../readest-app/src/app/reader/components/ReaderContent.tsx | 5 +++-- apps/readest-app/src/store/bookDataStore.ts | 6 +++++- apps/readest-app/src/store/readerStore.ts | 5 +++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/readest-app/src/app/reader/components/ReaderContent.tsx b/apps/readest-app/src/app/reader/components/ReaderContent.tsx index 7f7ae15e..37b949c2 100644 --- a/apps/readest-app/src/app/reader/components/ReaderContent.tsx +++ b/apps/readest-app/src/app/reader/components/ReaderContent.tsx @@ -36,7 +36,7 @@ const ReaderContent: React.FC<{ ids?: string; settings: SystemSettings }> = ({ i const { sideBarBookKey, setSideBarBookKey } = useSidebarStore(); const { saveSettings } = useSettingsStore(); const { getConfig, getBookData, saveConfig } = useBookDataStore(); - const { getView, setBookKeys } = useReaderStore(); + const { getView, setBookKeys, getViewSettings } = useReaderStore(); const { initViewState, getViewState, clearViewState } = useReaderStore(); const [showDetailsBook, setShowDetailsBook] = useState(null); const isInitiating = useRef(false); @@ -150,7 +150,8 @@ const ReaderContent: React.FC<{ ids?: string; settings: SystemSettings }> = ({ i if (!bookKeys || bookKeys.length === 0) return null; const bookData = getBookData(bookKeys[0]!); - if (!bookData || !bookData.book || !bookData.bookDoc) { + const viewSettings = getViewSettings(bookKeys[0]!); + if (!bookData || !bookData.book || !bookData.bookDoc || !viewSettings) { setTimeout(() => setLoading(true), 300); return ( loading && ( diff --git a/apps/readest-app/src/store/bookDataStore.ts b/apps/readest-app/src/store/bookDataStore.ts index fcd694fb..2302a2f8 100644 --- a/apps/readest-app/src/store/bookDataStore.ts +++ b/apps/readest-app/src/store/bookDataStore.ts @@ -42,7 +42,11 @@ export const useBookDataStore = create((set, get) => ({ setConfig: (key: string, partialConfig: Partial) => { set((state: BookDataState) => { const id = key.split('-')[0]!; - const config = (state.booksData[id]?.config || {}) as BookConfig; + const config = (state.booksData[id]?.config || null) as BookConfig; + if (!config) { + console.warn('No config found for book', id); + return state; + } Object.assign(config, partialConfig); return { booksData: { diff --git a/apps/readest-app/src/store/readerStore.ts b/apps/readest-app/src/store/readerStore.ts index 428371c1..9ab391e5 100644 --- a/apps/readest-app/src/store/readerStore.ts +++ b/apps/readest-app/src/store/readerStore.ts @@ -119,9 +119,9 @@ export const useReaderStore = create((set, get) => ({ }, })); try { + const { settings } = useSettingsStore.getState(); if (!bookData) { const appService = await envConfig.getAppService(); - const { settings } = useSettingsStore.getState(); const { library } = useLibraryStore.getState(); const book = library.find((b) => b.hash === id); if (!book) { @@ -145,6 +145,7 @@ export const useReaderStore = create((set, get) => ({ const booksData = useBookDataStore.getState().booksData; const config = booksData[id]?.config as BookConfig; const configViewSettings = config.viewSettings!; + const globalViewSettings = settings.globalViewSettings; set((state) => ({ viewStates: { ...state.viewStates, @@ -158,7 +159,7 @@ export const useReaderStore = create((set, get) => ({ progress: null, ribbonVisible: false, ttsEnabled: false, - viewSettings: JSON.parse(JSON.stringify(configViewSettings)) as ViewSettings, + viewSettings: { ...globalViewSettings, ...configViewSettings }, }, }, }));