From 71c2143cba7dd302e572bc271e9cd03fa412b1fd Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Sun, 7 Sep 2025 20:47:35 +0800 Subject: [PATCH] fix: avoid pagination until book view is inited, closes #1983 (#1994) --- apps/readest-app/src-tauri/src/lib.rs | 4 +++- .../src/app/reader/components/FoliateViewer.tsx | 3 ++- .../src/app/reader/hooks/usePagination.ts | 5 ++++- apps/readest-app/src/store/readerStore.ts | 16 ++++++++++++++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apps/readest-app/src-tauri/src/lib.rs b/apps/readest-app/src-tauri/src/lib.rs index 3b66e0b8..bc553b2b 100644 --- a/apps/readest-app/src-tauri/src/lib.rs +++ b/apps/readest-app/src-tauri/src/lib.rs @@ -268,7 +268,9 @@ pub fn run() { } #[cfg(target_os = "linux")] { - builder = builder.transparent(true).background_color(tauri::window::Color(0, 0, 0, 0)); + builder = builder + .transparent(true) + .background_color(tauri::window::Color(0, 0, 0, 0)); } builder diff --git a/apps/readest-app/src/app/reader/components/FoliateViewer.tsx b/apps/readest-app/src/app/reader/components/FoliateViewer.tsx index 70de48d9..82938866 100644 --- a/apps/readest-app/src/app/reader/components/FoliateViewer.tsx +++ b/apps/readest-app/src/app/reader/components/FoliateViewer.tsx @@ -65,7 +65,7 @@ const FoliateViewer: React.FC<{ const { themeCode, isDarkMode } = useThemeStore(); const { settings } = useSettingsStore(); const { loadCustomFonts, getLoadedFonts } = useCustomFontStore(); - const { getView, setView: setFoliateView, setProgress } = useReaderStore(); + const { getView, setView: setFoliateView, setViewInited, setProgress } = useReaderStore(); const { getViewState, getViewSettings, setViewSettings } = useReaderStore(); const { getParallels } = useParallelViewStore(); const { getBookData } = useBookDataStore(); @@ -314,6 +314,7 @@ const FoliateViewer: React.FC<{ } else { await view.goToFraction(0); } + setViewInited(bookKey, true); }; openBook(); diff --git a/apps/readest-app/src/app/reader/hooks/usePagination.ts b/apps/readest-app/src/app/reader/hooks/usePagination.ts index 9593aef2..85fb5202 100644 --- a/apps/readest-app/src/app/reader/hooks/usePagination.ts +++ b/apps/readest-app/src/app/reader/hooks/usePagination.ts @@ -38,13 +38,16 @@ export const usePagination = ( containerRef: React.RefObject, ) => { const { appService } = useEnv(); - const { getViewSettings } = useReaderStore(); + const { getViewSettings, getViewState } = useReaderStore(); const { hoveredBookKey, setHoveredBookKey } = useReaderStore(); const { acquireVolumeKeyInterception, releaseVolumeKeyInterception } = useDeviceControlStore(); const handlePageFlip = async ( msg: MessageEvent | CustomEvent | React.MouseEvent, ) => { + const viewState = getViewState(bookKey); + if (!viewState?.inited) return; + if (msg instanceof MessageEvent) { if (msg.data && msg.data.bookKey === bookKey) { const viewSettings = getViewSettings(bookKey)!; diff --git a/apps/readest-app/src/store/readerStore.ts b/apps/readest-app/src/store/readerStore.ts index a6e18dc7..782f42db 100644 --- a/apps/readest-app/src/store/readerStore.ts +++ b/apps/readest-app/src/store/readerStore.ts @@ -26,6 +26,7 @@ interface ViewState { view: FoliateView | null; isPrimary: boolean; loading: boolean; + inited: boolean; error: string | null; progress: BookProgress | null; ribbonVisible: boolean; @@ -73,6 +74,7 @@ interface ReaderStore { getViewState: (key: string) => ViewState | null; getGridInsets: (key: string) => Insets | null; setGridInsets: (key: string, insets: Insets | null) => void; + setViewInited: (key: string, inited: boolean) => void; } export const useReaderStore = create((set, get) => ({ @@ -116,6 +118,7 @@ export const useReaderStore = create((set, get) => ({ view: null, isPrimary: false, loading: true, + inited: false, error: null, progress: null, ribbonVisible: false, @@ -173,6 +176,7 @@ export const useReaderStore = create((set, get) => ({ view: null, isPrimary, loading: false, + inited: false, error: null, progress: null, ribbonVisible: false, @@ -193,6 +197,7 @@ export const useReaderStore = create((set, get) => ({ view: null, isPrimary: false, loading: false, + inited: false, error: 'Failed to load book.', progress: null, ribbonVisible: false, @@ -339,4 +344,15 @@ export const useReaderStore = create((set, get) => ({ }, }, })), + + setViewInited: (key: string, inited: boolean) => + set((state) => ({ + viewStates: { + ...state.viewStates, + [key]: { + ...state.viewStates[key]!, + inited, + }, + }, + })), }));