use dev path for local settings store

This commit is contained in:
jeffvli
2026-01-18 18:53:19 -08:00
parent 15633d07f0
commit a63763bfe8
3 changed files with 53 additions and 39 deletions
+15 -2
View File
@@ -1,7 +1,8 @@
import type { TitleTheme } from '/@/shared/types/types'; import type { TitleTheme } from '/@/shared/types/types';
import { dialog, ipcMain, nativeTheme, OpenDialogOptions, safeStorage } from 'electron'; import { app, dialog, ipcMain, nativeTheme, OpenDialogOptions, safeStorage } from 'electron';
import Store from 'electron-store'; import Store from 'electron-store';
import path from 'path';
const getFrame = () => { const getFrame = () => {
const isWindows = process.platform === 'win32'; const isWindows = process.platform === 'win32';
@@ -18,10 +19,18 @@ const getFrame = () => {
return 'linux'; return 'linux';
}; };
const isDevelopment = process.env.NODE_ENV === 'development';
const defaultUserDataPath = app.getPath('userData');
const storePath = isDevelopment
? path.normalize(`${defaultUserDataPath}-dev`)
: path.normalize(defaultUserDataPath);
export const store = new Store<any>({ export const store = new Store<any>({
beforeEachMigration: (_store, context) => { beforeEachMigration: (_store, context) => {
console.log(`settings migrate from ${context.fromVersion}${context.toVersion}`); console.log(`settings migrate from ${context.fromVersion}${context.toVersion}`);
}, },
cwd: storePath,
defaults: { defaults: {
disable_auto_updates: false, disable_auto_updates: false,
enableNeteaseTranslation: false, enableNeteaseTranslation: false,
@@ -52,7 +61,11 @@ ipcMain.handle('settings-get', (_event, data: { property: string }) => {
}); });
ipcMain.on('settings-set', (__event, data: { property: string; value: any }) => { ipcMain.on('settings-set', (__event, data: { property: string; value: any }) => {
store.set(`${data.property}`, data.value); if (data.value === undefined) {
store.delete(data.property);
} else {
store.set(data.property, data.value);
}
}); });
ipcMain.handle('password-get', (_event, server: string): null | string => { ipcMain.handle('password-get', (_event, server: string): null | string => {
+8 -12
View File
@@ -1,24 +1,16 @@
import { ipcRenderer, IpcRendererEvent, OpenDialogOptions, webFrame } from 'electron'; import { ipcRenderer, IpcRendererEvent, OpenDialogOptions, webFrame } from 'electron';
import Store from 'electron-store';
import { TitleTheme } from '/@/shared/types/types'; import { TitleTheme } from '/@/shared/types/types';
const store = new Store();
const set = ( const set = (
property: string, property: string,
value: boolean | Record<string, unknown> | string | string[] | undefined, value: boolean | Record<string, unknown> | string | string[] | undefined,
) => { ) => {
if (value === undefined) { ipcRenderer.send('settings-set', { property, value });
store.delete(property);
return;
}
store.set(`${property}`, value);
}; };
const get = (property: string) => { const get = async (property: string) => {
return store.get(`${property}`); return ipcRenderer.invoke('settings-get', { property });
}; };
const restart = () => { const restart = () => {
@@ -87,9 +79,13 @@ const env = {
SERVER_NAME: process.env.SERVER_NAME ?? '', SERVER_NAME: process.env.SERVER_NAME ?? '',
SERVER_TYPE, SERVER_TYPE,
SERVER_URL: process.env.SERVER_URL ?? 'http://', SERVER_URL: process.env.SERVER_URL ?? 'http://',
START_MAXIMIZED: store.get('maximized'), START_MAXIMIZED: undefined as boolean | undefined,
}; };
get('maximized').then((value) => {
env.START_MAXIMIZED = value as boolean | undefined;
});
export const localSettings = { export const localSettings = {
disableMediaKeys, disableMediaKeys,
enableMediaKeys, enableMediaKeys,
+30 -25
View File
@@ -42,7 +42,6 @@ export const useSyncSettingsToMain = () => {
hasRunRef.current = true; hasRunRef.current = true;
const localSettings = window.api.localSettings; const localSettings = window.api.localSettings;
let hasDifferences = false;
const settingsMappings: Array<{ const settingsMappings: Array<{
mainStoreKey: string; mainStoreKey: string;
@@ -105,34 +104,40 @@ export const useSyncSettingsToMain = () => {
]; ];
// Compare and sync each setting // Compare and sync each setting
for (const mapping of settingsMappings) { (async () => {
const mainValue = localSettings.get(mapping.mainStoreKey); let hasDifferences = false;
const rendererValue = mapping.rendererValue;
const mainValueNormalized = mainValue === undefined ? null : mainValue; for (const mapping of settingsMappings) {
const rendererValueNormalized = rendererValue === undefined ? null : rendererValue; const mainValue = await localSettings.get(mapping.mainStoreKey);
const rendererValue = mapping.rendererValue;
if ( const mainValueNormalized = mainValue === undefined ? null : mainValue;
JSON.stringify(mainValueNormalized) !== JSON.stringify(rendererValueNormalized) const rendererValueNormalized =
) { rendererValue === undefined ? null : rendererValue;
hasDifferences = true;
logFn.warn(logMsg.system.settingsSynchronized, { if (
meta: { JSON.stringify(mainValueNormalized) !==
mainStoreKey: mapping.mainStoreKey, JSON.stringify(rendererValueNormalized)
mainValue: mainValueNormalized, ) {
rendererValue: rendererValueNormalized, hasDifferences = true;
}, logFn.warn(logMsg.system.settingsSynchronized, {
}); meta: {
localSettings.set(mapping.mainStoreKey, rendererValue); mainStoreKey: mapping.mainStoreKey,
mainValue: mainValueNormalized,
rendererValue: rendererValueNormalized,
},
});
localSettings.set(mapping.mainStoreKey, rendererValue);
}
} }
}
// Show restart toast if there were differences // Show restart toast if there were differences
if (hasDifferences) { if (hasDifferences) {
openRestartRequiredToast( openRestartRequiredToast(
i18n.t('error.settingsSyncError', { postProcess: 'sentenceCase' }), i18n.t('error.settingsSyncError', { postProcess: 'sentenceCase' }),
); );
} }
})();
}, 5000); }, 5000);
return () => { return () => {