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)
}
}