diff --git a/src/main/server/index.ts b/src/main/server/index.ts index 82e195f2..3bfcdd5a 100644 --- a/src/main/server/index.ts +++ b/src/main/server/index.ts @@ -208,7 +208,12 @@ const userPlugin = async (ctx: any, next: any) => { const setting = async (ctx: any, next: any) => { if (ctx.path.startsWith('/api/settings')) { if (ctx.method === 'GET') { - ctx.body = result('ok', 'success', config.getAll()) + if (ctx.path.endsWith('js')) { + ctx.type = 'application/javascript; charset=utf-8' + ctx.body = '_INIT_SETTINGS = ' + JSON.stringify(config.getAll()) + } else { + ctx.body = result('ok', 'success', config.getAll()) + } } else if (ctx.method === 'POST') { const data = { ...config.getAll(), ...ctx.request.body } config.setAll(data) diff --git a/src/renderer/index.html b/src/renderer/index.html index 1e652a55..c2444dc1 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -19,6 +19,7 @@ // 设置初始主题 window.document.documentElement.setAttribute('app-theme', JSON.parse(localStorage['app.theme'] || '"system"')) +
diff --git a/src/renderer/services/setting.ts b/src/renderer/services/setting.ts index 1db4dca1..ac93a8fb 100644 --- a/src/renderer/services/setting.ts +++ b/src/renderer/services/setting.ts @@ -99,7 +99,10 @@ const schema: Schema = { required: ['theme', 'language'], } -const settings = getDefaultSetting() +const settings = { + ...getDefaultSetting(), + ...transformSettings(window._INIT_SETTINGS) +} if (FLAG_DISABLE_XTERM) { delete (schema.properties as any).shell @@ -181,24 +184,31 @@ export async function fetchSettings () { /** * Write settings. - * @param data settings + * @param settings * @returns settings */ -export async function writeSettings (data: Record) { - const repositories: any = {} - data.repos.forEach(({ name, path }: any) => { - name = name.trim() - path = path.trim() - if (name && path) { - repositories[name] = path - } - }) +export async function writeSettings (settings: Record) { + const data = cloneDeep(settings) - delete data.repos - delete data.theme - data.repositories = repositories + if (data.repos) { + const repositories: any = {} + data.repos.forEach(({ name, path }: any) => { + name = name.trim() + path = path.trim() + if (name && path) { + repositories[name] = path + } + }) - triggerHook('SETTING_BEFORE_WRITE', { settings }) + delete data.repos + data.repositories = repositories + } + + if (data.theme) { + delete data.theme + } + + triggerHook('SETTING_BEFORE_WRITE', { settings } as any) await api.writeSettings(data) return await fetchSettings() @@ -236,9 +246,7 @@ export function getSetting (key: T, defaultVal: * @returns */ export async function setSetting (key: T, val: BuildInSettings[T]) { - const settings = getSettings() - settings[key] = val - await writeSettings(settings) + await writeSettings({ [key]: val }) } /** diff --git a/src/renderer/shims-vue.d.ts b/src/renderer/shims-vue.d.ts index 4e0be1e7..f940cfa5 100644 --- a/src/renderer/shims-vue.d.ts +++ b/src/renderer/shims-vue.d.ts @@ -30,6 +30,7 @@ declare interface Window { kityminder: any; kityminderM: any; kityM: any; + _INIT_SETTINGS: any; } declare const __APP_VERSION__: string diff --git a/src/renderer/startup.ts b/src/renderer/startup.ts index b324f922..cfb8925f 100644 --- a/src/renderer/startup.ts +++ b/src/renderer/startup.ts @@ -91,7 +91,7 @@ const doc = getLastOpenFile() switchDoc(doc) function changeLanguage ({ settings }: { settings: BuildInSettings }) { - if (settings.language !== getLanguage()) { + if (settings.language && settings.language !== getLanguage()) { setLanguage(settings.language) } }