From b64a9a3ad26c03e84fa9e48af2f2a8c26a5cf100 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 27 Apr 2024 12:11:42 +0800 Subject: [PATCH 1/6] :art: Support minimize the main window after auto launch on Windows/macOS https://github.com/siyuan-note/siyuan/issues/11145 --- app/appearance/langs/en_US.json | 3 +++ app/appearance/langs/es_ES.json | 3 +++ app/appearance/langs/fr_FR.json | 3 +++ app/appearance/langs/zh_CHT.json | 3 +++ app/appearance/langs/zh_CN.json | 3 +++ app/electron/main.js | 12 +++++----- app/src/config/about.ts | 19 ++++++++++------ app/src/types/config.d.ts | 5 +++- kernel/api/system.go | 39 ++++++++++++++++++++++++++++++-- kernel/conf/system.go | 2 +- 10 files changed, 75 insertions(+), 17 deletions(-) diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index d4a5c779e..9711bd979 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1,4 +1,7 @@ { + "autoLaunchMode0": "Do not launch automatically", + "autoLaunchMode1": "Auto launch after booting", + "autoLaunchMode2": "Auto launch and minimize the interface after booting", "editorMarkdownInlineSup": "Markdown inline superscript syntax", "editorMarkdownInlineSupTip": "After enabling, ^foo^ inline superscript syntax input will be supported", "editorMarkdownInlineSub": "Markdown inline subscript syntax", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index dc6bdd9ba..2ece1125b 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1,4 +1,7 @@ { + "autoLaunchMode0": "No iniciar automáticamente", + "autoLaunchMode1": "Inicio automático después del arranque", + "autoLaunchMode2": "Iniciar automáticamente y minimizar la interfaz después del arranque", "editorMarkdownInlineSup": "Sintaxis de superíndice en línea de Markdown", "editorMarkdownInlineSupTip": "Después de habilitar, se admitirá la entrada de sintaxis de superíndice en línea ^foo^", "editorMarkdownInlineSub": "Sintaxis del subíndice en línea de Markdown", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index b1e13d309..036275105 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1,4 +1,7 @@ { + "autoLaunchMode0": "Ne pas lancer automatiquement", + "autoLaunchMode1": "Lancement automatique après le démarrage", + "autoLaunchMode2": "Lancement automatique et réduction de l'interface après le démarrage", "editorMarkdownInlineSup": "Syntaxe exposant Markdown en ligne", "editorMarkdownInlineSupTip": "Après l'activation, la saisie de la syntaxe en exposant ^foo^ en ligne sera prise en charge", "editorMarkdownInlineSub": "Syntaxe d'indice en ligne Markdown", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index fe1ce5f76..c9502d9de 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1,4 +1,7 @@ { + "autoLaunchMode0": "不自動啟動", + "autoLaunchMode1": "開機自動啟動", + "autoLaunchMode2": "開機自動啟動並最小化介面", "editorMarkdownInlineSup": "Markdown 行級上標語法", "editorMarkdownInlineSupTip": "啟用後將支援 ^foo^ 行級上標語法輸入", "editorMarkdownInlineSub": "Markdown 行級下標語法", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 0cff72cfb..450f78557 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1,4 +1,7 @@ { + "autoLaunchMode0": "不自动启动", + "autoLaunchMode1": "开机后自动启动", + "autoLaunchMode2": "开机后自动启动并最小化界面", "editorMarkdownInlineSup": "Markdown 行级上标语法", "editorMarkdownInlineSupTip": "启用后将支持 ^foo^ 行级上标语法输入", "editorMarkdownInlineSub": "Markdown 行级下标语法", diff --git a/app/electron/main.js b/app/electron/main.js index df6a94eab..4066a90eb 100644 --- a/app/electron/main.js +++ b/app/electron/main.js @@ -230,7 +230,7 @@ const writeLog = (out) => { } }; -const boot = () => { +const initMainWindow = () => { let windowStateInitialized = true; // 恢复主窗体状态 let oldWindowState = {}; @@ -1019,7 +1019,7 @@ app.whenReady().then(() => { if (!foundWorkspace) { initKernel(data.workspace, "", "").then((isSucc) => { if (isSucc) { - boot(); + initMainWindow(); } }); } @@ -1149,7 +1149,7 @@ app.whenReady().then(() => { ipcMain.on("siyuan-first-init", (event, data) => { initKernel(data.workspace, "", data.lang).then((isSucc) => { if (isSucc) { - boot(); + initMainWindow(); } }); firstOpenWindow.destroy(); @@ -1173,7 +1173,7 @@ app.whenReady().then(() => { } initKernel(workspace, port, "").then((isSucc) => { if (isSucc) { - boot(); + initMainWindow(); } }); } @@ -1280,7 +1280,7 @@ app.on("second-instance", (event, argv) => { if (workspace) { initKernel(workspace, port, "").then((isSucc) => { if (isSucc) { - boot(); + initMainWindow(); } }); return; @@ -1306,7 +1306,7 @@ app.on("activate", () => { } } if (BrowserWindow.getAllWindows().length === 0) { - boot(); + initMainWindow(); } }); diff --git a/app/src/config/about.ts b/app/src/config/about.ts index 060076217..9a6653293 100644 --- a/app/src/config/about.ts +++ b/app/src/config/about.ts @@ -16,14 +16,18 @@ import {setKey} from "../sync/syncGuide"; export const about = { element: undefined as Element, genHTML: () => { - return ` + return ` ${window.siyuan.languages.autoLaunch} ${window.siyuan.languages.autoLaunchTip} - - - + + + ${window.siyuan.languages.autoLaunchMode0} + ${window.siyuan.languages.autoLaunchMode1} + ${window.siyuan.languages.autoLaunchMode2} + + ${window.siyuan.languages.autoDownloadUpdatePkg} @@ -348,9 +352,10 @@ export const about = { /// #if !BROWSER const autoLaunchElement = about.element.querySelector("#autoLaunch") as HTMLInputElement; autoLaunchElement.addEventListener("change", () => { - fetchPost("/api/system/setAutoLaunch", {autoLaunch: autoLaunchElement.checked}, () => { - window.siyuan.config.system.autoLaunch = autoLaunchElement.checked; - ipcRenderer.send(Constants.SIYUAN_AUTO_LAUNCH, {openAtLogin: autoLaunchElement.checked}); + const autoLaunchMode = parseInt(autoLaunchElement.value) + fetchPost("/api/system/setAutoLaunch", {autoLaunch: autoLaunchMode}, () => { + window.siyuan.config.system.autoLaunch = autoLaunchMode; + ipcRenderer.send(Constants.SIYUAN_AUTO_LAUNCH, {openAtLogin: 0 != autoLaunchMode}); }); }); /// #endif diff --git a/app/src/types/config.d.ts b/app/src/types/config.d.ts index 6f20ae6eb..ef6877149 100644 --- a/app/src/types/config.d.ts +++ b/app/src/types/config.d.ts @@ -1351,8 +1351,11 @@ declare namespace Config { appDir: string; /** * Boot automatically + * - `0`: Do not boot automatically + * - `1`: Boot automatically + * - `2`: Boot automatically + Minimize UI */ - autoLaunch: boolean; + autoLaunch: number; /** * The absolute path of the `conf` directory of the current workspace */ diff --git a/kernel/api/system.go b/kernel/api/system.go index 0606bef38..e8abad795 100644 --- a/kernel/api/system.go +++ b/kernel/api/system.go @@ -421,9 +421,44 @@ func setAutoLaunch(c *gin.Context) { return } - autoLaunch := arg["autoLaunch"].(bool) - model.Conf.System.AutoLaunch = autoLaunch + autoLaunch := int(arg["autoLaunch"].(float64)) + model.Conf.System.AutoLaunch2 = autoLaunch model.Conf.Save() + + windowStateConf := filepath.Join(util.ConfDir, "windowState.json") + windowState := map[string]interface{}{} + if gulu.File.IsExist(windowStateConf) { + succ := false + const maxRetry = 7 + for i := 0; i < maxRetry; i++ { + data, err := os.ReadFile(windowStateConf) + if nil != err { + logging.LogErrorf("read [windowState.json] failed [%d/%d]: %s", i, maxRetry, err) + time.Sleep(time.Second) + } else { + if err = gulu.JSON.UnmarshalJSON(data, &windowState); nil != err { + logging.LogErrorf("unmarshal [windowState.json] failed: %s", err) + } else { + succ = true + break + } + } + } + if !succ { + logging.LogErrorf("read [windowState.json] failed") + } + } + windowState["autoLaunch"] = autoLaunch + + data, err := gulu.JSON.MarshalJSON(windowState) + if nil != err { + logging.LogErrorf("marshal [windowState.json] failed: %s", err) + return + } + + if err = gulu.File.WriteFileSafer(windowStateConf, data, 0644); nil != err { + logging.LogErrorf("create [windowState.json] failed: %s", err) + } } func setDownloadInstallPkg(c *gin.Context) { diff --git a/kernel/conf/system.go b/kernel/conf/system.go index 591d17d5c..6d51b4ce1 100644 --- a/kernel/conf/system.go +++ b/kernel/conf/system.go @@ -42,7 +42,7 @@ type System struct { UploadErrLog bool `json:"uploadErrLog"` DisableGoogleAnalytics bool `json:"disableGoogleAnalytics"` DownloadInstallPkg bool `json:"downloadInstallPkg"` - AutoLaunch bool `json:"autoLaunch"` + AutoLaunch2 int `json:"autoLaunch2"` // 0:不自动启动,1:自动启动,2:自动启动+隐藏主窗口 LockScreenMode int `json:"lockScreenMode"` // 0:手动,1:手动+跟随系统 https://github.com/siyuan-note/siyuan/issues/9087 } From bd11baef4e24bd76c66a01eea0198937ffb3ed51 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 27 Apr 2024 12:21:51 +0800 Subject: [PATCH 2/6] :art: Support minimize the main window after auto launch on Windows/macOS https://github.com/siyuan-note/siyuan/issues/11145 --- app/appearance/langs/en_US.json | 2 +- app/appearance/langs/es_ES.json | 2 +- app/appearance/langs/fr_FR.json | 2 +- app/appearance/langs/zh_CHT.json | 2 +- app/appearance/langs/zh_CN.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 9711bd979..16e0dd47b 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1,7 +1,7 @@ { "autoLaunchMode0": "Do not launch automatically", "autoLaunchMode1": "Auto launch after booting", - "autoLaunchMode2": "Auto launch and minimize the interface after booting", + "autoLaunchMode2": "Auto launch and minimize the main interface after booting", "editorMarkdownInlineSup": "Markdown inline superscript syntax", "editorMarkdownInlineSupTip": "After enabling, ^foo^ inline superscript syntax input will be supported", "editorMarkdownInlineSub": "Markdown inline subscript syntax", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index 2ece1125b..cd54ba048 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1,7 +1,7 @@ { "autoLaunchMode0": "No iniciar automáticamente", "autoLaunchMode1": "Inicio automático después del arranque", - "autoLaunchMode2": "Iniciar automáticamente y minimizar la interfaz después del arranque", + "autoLaunchMode2": "Iniciar automáticamente y minimizar la interfaz principal después del arranque", "editorMarkdownInlineSup": "Sintaxis de superíndice en línea de Markdown", "editorMarkdownInlineSupTip": "Después de habilitar, se admitirá la entrada de sintaxis de superíndice en línea ^foo^", "editorMarkdownInlineSub": "Sintaxis del subíndice en línea de Markdown", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 036275105..5f133ad9d 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1,7 +1,7 @@ { "autoLaunchMode0": "Ne pas lancer automatiquement", "autoLaunchMode1": "Lancement automatique après le démarrage", - "autoLaunchMode2": "Lancement automatique et réduction de l'interface après le démarrage", + "autoLaunchMode2": "Lancement automatique et minimisation de l'interface principale après le démarrage", "editorMarkdownInlineSup": "Syntaxe exposant Markdown en ligne", "editorMarkdownInlineSupTip": "Après l'activation, la saisie de la syntaxe en exposant ^foo^ en ligne sera prise en charge", "editorMarkdownInlineSub": "Syntaxe d'indice en ligne Markdown", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index c9502d9de..976f502b3 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1,7 +1,7 @@ { "autoLaunchMode0": "不自動啟動", "autoLaunchMode1": "開機自動啟動", - "autoLaunchMode2": "開機自動啟動並最小化介面", + "autoLaunchMode2": "開機後自動啟動並最小化主介面", "editorMarkdownInlineSup": "Markdown 行級上標語法", "editorMarkdownInlineSupTip": "啟用後將支援 ^foo^ 行級上標語法輸入", "editorMarkdownInlineSub": "Markdown 行級下標語法", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 450f78557..aa4dc3bbd 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1,7 +1,7 @@ { "autoLaunchMode0": "不自动启动", "autoLaunchMode1": "开机后自动启动", - "autoLaunchMode2": "开机后自动启动并最小化界面", + "autoLaunchMode2": "开机后自动启动并最小化主界面", "editorMarkdownInlineSup": "Markdown 行级上标语法", "editorMarkdownInlineSupTip": "启用后将支持 ^foo^ 行级上标语法输入", "editorMarkdownInlineSub": "Markdown 行级下标语法", From fa897e91d57cb207786b0d0563596efe90144d4a Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 27 Apr 2024 13:19:54 +0800 Subject: [PATCH 3/6] :art: Support minimize the main window after auto launch on Windows/macOS https://github.com/siyuan-note/siyuan/issues/11145 --- kernel/api/system.go | 35 ----------------------------------- kernel/model/conf.go | 7 ------- 2 files changed, 42 deletions(-) diff --git a/kernel/api/system.go b/kernel/api/system.go index e8abad795..18c235cf7 100644 --- a/kernel/api/system.go +++ b/kernel/api/system.go @@ -424,41 +424,6 @@ func setAutoLaunch(c *gin.Context) { autoLaunch := int(arg["autoLaunch"].(float64)) model.Conf.System.AutoLaunch2 = autoLaunch model.Conf.Save() - - windowStateConf := filepath.Join(util.ConfDir, "windowState.json") - windowState := map[string]interface{}{} - if gulu.File.IsExist(windowStateConf) { - succ := false - const maxRetry = 7 - for i := 0; i < maxRetry; i++ { - data, err := os.ReadFile(windowStateConf) - if nil != err { - logging.LogErrorf("read [windowState.json] failed [%d/%d]: %s", i, maxRetry, err) - time.Sleep(time.Second) - } else { - if err = gulu.JSON.UnmarshalJSON(data, &windowState); nil != err { - logging.LogErrorf("unmarshal [windowState.json] failed: %s", err) - } else { - succ = true - break - } - } - } - if !succ { - logging.LogErrorf("read [windowState.json] failed") - } - } - windowState["autoLaunch"] = autoLaunch - - data, err := gulu.JSON.MarshalJSON(windowState) - if nil != err { - logging.LogErrorf("marshal [windowState.json] failed: %s", err) - return - } - - if err = gulu.File.WriteFileSafer(windowStateConf, data, 0644); nil != err { - logging.LogErrorf("create [windowState.json] failed: %s", err) - } } func setDownloadInstallPkg(c *gin.Context) { diff --git a/kernel/model/conf.go b/kernel/model/conf.go index e9928a0d1..1dbdd26e4 100644 --- a/kernel/model/conf.go +++ b/kernel/model/conf.go @@ -112,13 +112,6 @@ func (conf *AppConf) SetUser(user *conf.User) { func InitConf() { initLang() - windowStateConf := filepath.Join(util.ConfDir, "windowState.json") - if !gulu.File.IsExist(windowStateConf) { - if err := gulu.File.WriteFileSafer(windowStateConf, []byte("{}"), 0644); nil != err { - logging.LogErrorf("create [windowState.json] failed: %s", err) - } - } - Conf = &AppConf{LogLevel: "debug", m: &sync.Mutex{}} confPath := filepath.Join(util.ConfDir, "conf.json") if gulu.File.IsExist(confPath) { From 4af7fef6e44a9e9a6f7c7cb7ab3cff7def7b8d25 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 27 Apr 2024 13:30:25 +0800 Subject: [PATCH 4/6] :bug: https://github.com/siyuan-note/siyuan/issues/11149 --- kernel/model/tree.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kernel/model/tree.go b/kernel/model/tree.go index a83e09a06..10c50b0ec 100644 --- a/kernel/model/tree.go +++ b/kernel/model/tree.go @@ -251,6 +251,11 @@ func searchTreeInFilesystem(rootID string) { return } + if nil == Conf.Box(boxID) { + // 如果笔记本不存在或者已经关闭,则不处理 https://github.com/siyuan-note/siyuan/issues/11149 + return + } + treenode.IndexBlockTree(tree) sql.IndexTreeQueue(tree) logging.LogInfof("reindexed tree by filesystem [rootID=%s]", rootID) From 0312e968a11fcb139dc33cc0418b6996110371ba Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 27 Apr 2024 13:30:48 +0800 Subject: [PATCH 5/6] :bug: https://github.com/siyuan-note/siyuan/issues/11149 --- kernel/model/tree.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/kernel/model/tree.go b/kernel/model/tree.go index 10c50b0ec..65e180ab4 100644 --- a/kernel/model/tree.go +++ b/kernel/model/tree.go @@ -244,6 +244,10 @@ func searchTreeInFilesystem(rootID string) { treePath = strings.TrimPrefix(treePath, string(os.PathSeparator)) treePath = strings.TrimPrefix(treePath, boxID) treePath = filepath.ToSlash(treePath) + if nil == Conf.Box(boxID) { + // 如果笔记本不存在或者已经关闭,则不处理 https://github.com/siyuan-note/siyuan/issues/11149 + return + } tree, err := filesys.LoadTree(boxID, treePath, util.NewLute()) if nil != err { @@ -251,11 +255,6 @@ func searchTreeInFilesystem(rootID string) { return } - if nil == Conf.Box(boxID) { - // 如果笔记本不存在或者已经关闭,则不处理 https://github.com/siyuan-note/siyuan/issues/11149 - return - } - treenode.IndexBlockTree(tree) sql.IndexTreeQueue(tree) logging.LogInfof("reindexed tree by filesystem [rootID=%s]", rootID) From 4773700a6e99e31f680a3116d6372a94f5fc9b7a Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 27 Apr 2024 13:31:13 +0800 Subject: [PATCH 6/6] :bug: https://github.com/siyuan-note/siyuan/issues/11149 --- kernel/model/tree.go | 1 + 1 file changed, 1 insertion(+) diff --git a/kernel/model/tree.go b/kernel/model/tree.go index 65e180ab4..7e6c97a81 100644 --- a/kernel/model/tree.go +++ b/kernel/model/tree.go @@ -245,6 +245,7 @@ func searchTreeInFilesystem(rootID string) { treePath = strings.TrimPrefix(treePath, boxID) treePath = filepath.ToSlash(treePath) if nil == Conf.Box(boxID) { + logging.LogInfof("box [%s] not found", boxID) // 如果笔记本不存在或者已经关闭,则不处理 https://github.com/siyuan-note/siyuan/issues/11149 return }
^foo^