From c33e9429cd798a9a435695a684e2f59bcc46ab9a Mon Sep 17 00:00:00 2001 From: Vanessa Date: Fri, 27 Sep 2024 00:21:31 +0800 Subject: [PATCH] :art: fix https://github.com/siyuan-note/siyuan/issues/12606 --- app/src/layout/topBar.ts | 2 +- app/src/layout/util.ts | 13 ++++------ app/src/mobile/menu/index.ts | 2 +- app/src/protyle/scroll/saveScroll.ts | 7 +++++- app/src/protyle/util/compatibility.ts | 1 - app/src/protyle/util/reload.ts | 2 +- app/src/util/backForward.ts | 2 +- app/src/util/processMessage.ts | 34 ++++++++++++++++++--------- 8 files changed, 38 insertions(+), 25 deletions(-) diff --git a/app/src/layout/topBar.ts b/app/src/layout/topBar.ts index 3c1d9faac..75042ff75 100644 --- a/app/src/layout/topBar.ts +++ b/app/src/layout/topBar.ts @@ -119,11 +119,11 @@ export const initBar = (app: App) => { event.stopPropagation(); break; } else if (targetId === "barExit") { + event.stopPropagation(); exportLayout({ errorExit: true, cb: exitSiYuan, }); - event.stopPropagation(); break; } else if (targetId === "barMode") { if (!window.siyuan.menus.menu.element.classList.contains("fn__none") && diff --git a/app/src/layout/util.ts b/app/src/layout/util.ts index 8f582e136..e668d622a 100644 --- a/app/src/layout/util.ts +++ b/app/src/layout/util.ts @@ -225,18 +225,19 @@ export const saveLayout = () => { } }; -export const exportLayout = (options: { +export const exportLayout = async (options: { cb: () => void, errorExit: boolean }) => { + const editors = getAllModels().editor + for (let i = 0; i < editors.length; i++) { + await saveScroll(editors[i].editor.protyle); + } if (isWindow()) { const layoutJSON: any = { layout: {}, }; layoutToJSON(window.siyuan.layout.layout, layoutJSON.layout); - getAllModels().editor.forEach(item => { - saveScroll(item.editor.protyle); - }); sessionStorage.setItem("layout", JSON.stringify(layoutJSON)); options.cb(); return; @@ -253,10 +254,6 @@ export const exportLayout = (options: { right: dockToJSON(window.siyuan.layout.rightDock), }; layoutToJSON(window.siyuan.layout.layout, layoutJSON.layout); - getAllModels().editor.forEach(item => { - saveScroll(item.editor.protyle); - }); - if (window.siyuan.config.readonly) { options.cb(); } else { diff --git a/app/src/mobile/menu/index.ts b/app/src/mobile/menu/index.ts index c012c1e7b..7bfe30b88 100644 --- a/app/src/mobile/menu/index.ts +++ b/app/src/mobile/menu/index.ts @@ -170,9 +170,9 @@ export const initRightMenu = (app: App) => { event.stopPropagation(); break; } else if (target.id === "menuSafeQuit") { - exitSiYuan(); event.preventDefault(); event.stopPropagation(); + exitSiYuan(); break; } else if (target.id === "menuAbout") { initAbout(); diff --git a/app/src/protyle/scroll/saveScroll.ts b/app/src/protyle/scroll/saveScroll.ts index 0ae19c117..f67404993 100644 --- a/app/src/protyle/scroll/saveScroll.ts +++ b/app/src/protyle/scroll/saveScroll.ts @@ -39,8 +39,13 @@ export const saveScroll = (protyle: IProtyle, getObject = false) => { if (getObject) { return attr; } + window.siyuan.storage[Constants.LOCAL_FILEPOSITION][protyle.block.rootID] = attr; - setStorageVal(Constants.LOCAL_FILEPOSITION, window.siyuan.storage[Constants.LOCAL_FILEPOSITION]); + return new Promise(resolve => { + setStorageVal(Constants.LOCAL_FILEPOSITION, window.siyuan.storage[Constants.LOCAL_FILEPOSITION], () => { + resolve(true); + }); + }) }; export const getDocByScroll = (options: { diff --git a/app/src/protyle/util/compatibility.ts b/app/src/protyle/util/compatibility.ts index a16d71522..5647f848e 100644 --- a/app/src/protyle/util/compatibility.ts +++ b/app/src/protyle/util/compatibility.ts @@ -300,7 +300,6 @@ export const setStorageVal = (key: string, val: any, cb?: () => void) => { if (window.siyuan.config.readonly) { return; } - fetchPost("/api/storage/setLocalStorageVal", { app: Constants.SIYUAN_APPID, key, diff --git a/app/src/protyle/util/reload.ts b/app/src/protyle/util/reload.ts index 46b4cf65c..e6fb4831a 100644 --- a/app/src/protyle/util/reload.ts +++ b/app/src/protyle/util/reload.ts @@ -54,7 +54,7 @@ export const reloadProtyle = (protyle: IProtyle, focus: boolean, updateReadonly? getDocByScroll({ protyle, focus, - scrollAttr: saveScroll(protyle, true), + scrollAttr: saveScroll(protyle, true) as IScrollAttr, updateReadonly }); } diff --git a/app/src/util/backForward.ts b/app/src/util/backForward.ts index 9009d163c..2f01a4c64 100644 --- a/app/src/util/backForward.ts +++ b/app/src/util/backForward.ts @@ -48,7 +48,7 @@ const focusStack = async (app: App, stack: IBackStack) => { title: info.data.rootTitle, docIcon: info.data.rootIcon, callback(tab) { - const scrollAttr = saveScroll(stack.protyle, true); + const scrollAttr = saveScroll(stack.protyle, true) as IScrollAttr; scrollAttr.rootId = stack.protyle.block.rootID; scrollAttr.focusId = stack.id; scrollAttr.focusStart = stack.position.start; diff --git a/app/src/util/processMessage.ts b/app/src/util/processMessage.ts index 486ae21b4..6093d553f 100644 --- a/app/src/util/processMessage.ts +++ b/app/src/util/processMessage.ts @@ -24,18 +24,30 @@ export const processMessage = (response: IWebSocketData) => { if ("reloadui" === response.cmd) { if (response.data?.resetScroll) { window.siyuan.storage[Constants.LOCAL_FILEPOSITION] = {}; - setStorageVal(Constants.LOCAL_FILEPOSITION, window.siyuan.storage[Constants.LOCAL_FILEPOSITION]); - } - /// #if MOBILE - window.location.reload(); - /// #else - exportLayout({ - cb() { + setStorageVal(Constants.LOCAL_FILEPOSITION, window.siyuan.storage[Constants.LOCAL_FILEPOSITION], () => { + /// #if MOBILE window.location.reload(); - }, - errorExit: false, - }); - /// #endif + /// #else + exportLayout({ + cb() { + window.location.reload(); + }, + errorExit: false, + }); + /// #endif + }); + } else { + /// #if MOBILE + window.location.reload(); + /// #else + exportLayout({ + cb() { + window.location.reload(); + }, + errorExit: false, + }); + /// #endif + } return false; }