diff --git a/app/src/dialog/processSystem.ts b/app/src/dialog/processSystem.ts index 5040785d5..cc57bfd8f 100644 --- a/app/src/dialog/processSystem.ts +++ b/app/src/dialog/processSystem.ts @@ -280,20 +280,20 @@ export const kernelError = () => { } }; -export const exitSiYuan = async () => { +export const exitSiYuan = async (setCurrentWorkspace = true) => { hideAllElements(["util"]); /// #if MOBILE if (window.siyuan.mobile.editor) { await saveScroll(window.siyuan.mobile.editor.protyle); } /// #endif - fetchPost("/api/system/exit", {force: false}, (response) => { + fetchPost("/api/system/exit", {force: false, setCurrentWorkspace}, (response) => { if (response.code === 1) { // 同步执行失败 const msgId = showMessage(response.msg, response.data.closeTimeout, "error"); const buttonElement = document.querySelector(`#message [data-id="${msgId}"] button`); if (buttonElement) { buttonElement.addEventListener("click", () => { - fetchPost("/api/system/exit", {force: true}, () => { + fetchPost("/api/system/exit", {force: true, setCurrentWorkspace}, () => { /// #if !BROWSER ipcRenderer.send(Constants.SIYUAN_QUIT, location.port); /// #else @@ -318,6 +318,7 @@ export const exitSiYuan = async () => { confirmDialog(window.siyuan.languages.tip, response.msg, () => { fetchPost("/api/system/exit", { force: true, + setCurrentWorkspace, execInstallPkg: 2 // 0:默认检查新版本,1:不执行新版本安装,2:执行新版本安装 }, () => { /// #if !BROWSER @@ -335,6 +336,7 @@ export const exitSiYuan = async () => { }, () => { fetchPost("/api/system/exit", { force: true, + setCurrentWorkspace, execInstallPkg: 1 // 0:默认检查新版本,1:不执行新版本安装,2:执行新版本安装 }, () => { /// #if !BROWSER diff --git a/app/src/menus/workspace.ts b/app/src/menus/workspace.ts index 141d22a7e..6c9786005 100644 --- a/app/src/menus/workspace.ts +++ b/app/src/menus/workspace.ts @@ -7,14 +7,7 @@ import {getOpenNotebookCount, originalPath, pathPosix, useShell} from "../util/p import {fetchNewDailyNote, mountHelp, newDailyNote} from "../util/mount"; import {fetchPost} from "../util/fetch"; import {Constants} from "../constants"; -import { - isInAndroid, - isInHarmony, - isInIOS, - isIPad, - setStorageVal, - writeText -} from "../protyle/util/compatibility"; +import {isInAndroid, isInHarmony, isInIOS, isIPad, setStorageVal, writeText} from "../protyle/util/compatibility"; import {openCard} from "../card/openCard"; import {openSetting} from "../config"; import {getAllDocks} from "../layout/getAll"; @@ -287,7 +280,7 @@ export const workspaceMenu = (app: App, rect: DOMRect) => { fetchPost("/api/system/setWorkspaceDir", { path: openPath }, () => { - exitSiYuan(); + exitSiYuan(false); }); }); }); @@ -317,7 +310,7 @@ export const workspaceMenu = (app: App, rect: DOMRect) => { fetchPost("/api/system/setWorkspaceDir", { path: item.path }, () => { - exitSiYuan(); + exitSiYuan(false); }); }); }); diff --git a/app/src/mobile/settings/about.ts b/app/src/mobile/settings/about.ts index 30222a16c..608cc0e1d 100644 --- a/app/src/mobile/settings/about.ts +++ b/app/src/mobile/settings/about.ts @@ -358,7 +358,7 @@ export const initAbout = () => { fetchPost("/api/system/setWorkspaceDir", { path: openPath }, () => { - exitSiYuan(); + exitSiYuan(false); }); }); }); @@ -412,7 +412,7 @@ export const initAbout = () => { fetchPost("/api/system/setWorkspaceDir", { path: target.getAttribute("data-path") }, () => { - exitSiYuan(); + exitSiYuan(false); }); }); event.preventDefault(); diff --git a/kernel/api/system.go b/kernel/api/system.go index 641bbef75..83b9367b2 100644 --- a/kernel/api/system.go +++ b/kernel/api/system.go @@ -785,7 +785,13 @@ func exit(c *gin.Context) { execInstallPkg = int(execInstallPkgArg.(float64)) } - exitCode := model.Close(force, true, execInstallPkg) + setCurrentWorkspaceArg := arg["setCurrentWorkspace"] + setCurrentWorkspace := true + if nil != setCurrentWorkspaceArg { + setCurrentWorkspace = setCurrentWorkspaceArg.(bool) + } + + exitCode := model.Close(force, setCurrentWorkspace, execInstallPkg) ret.Code = exitCode switch exitCode { case 0: diff --git a/kernel/api/workspace.go b/kernel/api/workspace.go index 5bd6071e0..35a0bc9f8 100644 --- a/kernel/api/workspace.go +++ b/kernel/api/workspace.go @@ -333,13 +333,8 @@ func setWorkspaceDir(c *gin.Context) { return } - if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container || util.ContainerHarmony == util.Container { - util.PushMsg(model.Conf.Language(42), 1000*15) - go func() { - time.Sleep(1 * time.Second) - model.Close(false, false, 1) - }() - } + util.PushMsg(model.Conf.Language(42), 1000*15) + time.Sleep(1 * time.Second) } func isInvalidWorkspacePath(absPath string) bool { diff --git a/kernel/server/serve.go b/kernel/server/serve.go index 3654f8f86..479f903f1 100644 --- a/kernel/server/serve.go +++ b/kernel/server/serve.go @@ -18,6 +18,7 @@ package server import ( "bytes" + "errors" "fmt" "html/template" "mime" @@ -222,6 +223,10 @@ func Serve(fastMode bool) { } if err = util.HttpServer.Serve(ln); err != nil { + if errors.Is(err, http.ErrServerClosed) { + return + } + if !fastMode { logging.LogErrorf("boot kernel failed: %s", err) os.Exit(logging.ExitCodeUnavailablePort)