forked from akai/readest
64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
import { ViewSettings } from '@/types/book';
|
|
import { SystemSettings } from '@/types/settings';
|
|
import { EnvConfigType } from '@/services/environment';
|
|
import { useBookDataStore } from '@/store/bookDataStore';
|
|
import { useReaderStore } from '@/store/readerStore';
|
|
import { useSettingsStore } from '@/store/settingsStore';
|
|
import { getStyles } from '@/utils/style';
|
|
|
|
export const saveViewSettings = async <K extends keyof ViewSettings>(
|
|
envConfig: EnvConfigType,
|
|
bookKey: string,
|
|
key: K,
|
|
value: ViewSettings[K],
|
|
skipGlobal = false,
|
|
applyStyles = true,
|
|
) => {
|
|
const { settings, isSettingsGlobal, setSettings, saveSettings } = useSettingsStore.getState();
|
|
const { bookKeys, getView, getViewState, getViewSettings, setViewSettings } =
|
|
useReaderStore.getState();
|
|
const { getConfig, saveConfig } = useBookDataStore.getState();
|
|
|
|
const applyViewSettings = async (bookKey: string) => {
|
|
const viewSettings = getViewSettings(bookKey);
|
|
const viewState = getViewState(bookKey);
|
|
if (bookKey && viewSettings && viewSettings[key] !== value) {
|
|
viewSettings[key] = value;
|
|
setViewSettings(bookKey, viewSettings);
|
|
if (applyStyles) {
|
|
const view = getView(bookKey);
|
|
view?.renderer.setStyles?.(getStyles(viewSettings));
|
|
}
|
|
const config = getConfig(bookKey);
|
|
if (viewState?.isPrimary && config) {
|
|
await saveConfig(envConfig, bookKey, config, settings);
|
|
}
|
|
}
|
|
};
|
|
|
|
if (isSettingsGlobal && !skipGlobal) {
|
|
settings.globalViewSettings[key] = value;
|
|
setSettings(settings);
|
|
|
|
for (const bookKey of bookKeys) {
|
|
await applyViewSettings(bookKey);
|
|
}
|
|
await saveSettings(envConfig, settings);
|
|
} else if (bookKey) {
|
|
await applyViewSettings(bookKey);
|
|
}
|
|
};
|
|
|
|
export const saveSysSettings = async <K extends keyof SystemSettings>(
|
|
envConfig: EnvConfigType,
|
|
key: K,
|
|
value: SystemSettings[K],
|
|
) => {
|
|
const { settings, setSettings, saveSettings } = useSettingsStore.getState();
|
|
if (settings[key] !== value) {
|
|
settings[key] = value;
|
|
setSettings(settings);
|
|
await saveSettings(envConfig, settings);
|
|
}
|
|
};
|