fix: restore full view settings when reopening book (#1400)

This commit is contained in:
Huang Xin
2025-06-15 22:07:51 +08:00
committed by GitHub
parent f7f8872a13
commit ed68d25b15
3 changed files with 11 additions and 5 deletions
@@ -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<Book | null>(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 && (
+5 -1
View File
@@ -42,7 +42,11 @@ export const useBookDataStore = create<BookDataState>((set, get) => ({
setConfig: (key: string, partialConfig: Partial<BookConfig>) => {
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: {
+3 -2
View File
@@ -119,9 +119,9 @@ export const useReaderStore = create<ReaderStore>((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<ReaderStore>((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<ReaderStore>((set, get) => ({
progress: null,
ribbonVisible: false,
ttsEnabled: false,
viewSettings: JSON.parse(JSON.stringify(configViewSettings)) as ViewSettings,
viewSettings: { ...globalViewSettings, ...configViewSettings },
},
},
}));