From 9c37468386c6dfa6c589205704b6956363a06032 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Wed, 10 Sep 2025 17:53:51 +0800 Subject: [PATCH 1/2] :art: https://github.com/siyuan-note/siyuan/issues/15762 --- app/src/layout/dock/Files.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/layout/dock/Files.ts b/app/src/layout/dock/Files.ts index 3228aeabc..146aefb4f 100644 --- a/app/src/layout/dock/Files.ts +++ b/app/src/layout/dock/Files.ts @@ -1016,6 +1016,12 @@ data-type="navigation-root" data-path="/"> } else { sourceElement.remove(); } + } else { + const parentElement = this.element.querySelector(`ul[data-url="${response.data.fromNotebook}"] li[data-path="${pathPosix().dirname(response.data.fromPath)}.sy"]`) as HTMLElement; + if (parentElement && parentElement.getAttribute("data-count") === "1") { + parentElement.querySelector(".b3-list-item__toggle").classList.add(".fn__hidden"); + parentElement.querySelector(".b3-list-item__arrow").classList.remove("b3-list-item__arrow--open"); + } } const newElement = this.element.querySelector(`[data-url="${response.data.toNotebook}"] li[data-path="${response.data.toPath}"]`) as HTMLElement; // 更新移动到的新文件夹 From ee4ddf89c1dd89ea8d2c81e5d1456afe16da784b Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 10 Sep 2025 21:39:14 +0800 Subject: [PATCH 2/2] :art: Refresh the data in the interface after moving the document https://github.com/siyuan-note/siyuan/issues/15762 Signed-off-by: Daniel <845765@qq.com> --- app/src/layout/dock/Files.ts | 9 ++------- kernel/filesys/tree.go | 6 ++++++ kernel/model/box.go | 2 ++ kernel/model/file.go | 8 ++++++-- kernel/model/push_reload.go | 24 ++++++++++-------------- kernel/model/tree.go | 13 +++++++++++++ 6 files changed, 39 insertions(+), 23 deletions(-) diff --git a/app/src/layout/dock/Files.ts b/app/src/layout/dock/Files.ts index 146aefb4f..4459c92ac 100644 --- a/app/src/layout/dock/Files.ts +++ b/app/src/layout/dock/Files.ts @@ -14,12 +14,7 @@ import {fetchPost, fetchSyncPost} from "../../util/fetch"; import {openEmojiPanel, unicode2Emoji} from "../../emoji"; import {mountHelp, newNotebook} from "../../util/mount"; import {confirmDialog} from "../../dialog/confirmDialog"; -import { - isNotCtrl, - isOnlyMeta, - setStorageVal, - updateHotkeyAfterTip -} from "../../protyle/util/compatibility"; +import {isNotCtrl, isOnlyMeta, setStorageVal, updateHotkeyAfterTip} from "../../protyle/util/compatibility"; import {openFileById} from "../../editor/util"; import { hasClosestByAttribute, @@ -1019,7 +1014,7 @@ data-type="navigation-root" data-path="/"> } else { const parentElement = this.element.querySelector(`ul[data-url="${response.data.fromNotebook}"] li[data-path="${pathPosix().dirname(response.data.fromPath)}.sy"]`) as HTMLElement; if (parentElement && parentElement.getAttribute("data-count") === "1") { - parentElement.querySelector(".b3-list-item__toggle").classList.add(".fn__hidden"); + parentElement.querySelector(".b3-list-item__toggle").classList.add("fn__hidden"); parentElement.querySelector(".b3-list-item__arrow").classList.remove("b3-list-item__arrow--open"); } } diff --git a/kernel/filesys/tree.go b/kernel/filesys/tree.go index af97751fd..8ee1204eb 100644 --- a/kernel/filesys/tree.go +++ b/kernel/filesys/tree.go @@ -206,6 +206,12 @@ func DocIAL(absPath string) (ret map[string]string) { return } +func TreeSize(tree *parse.Tree) (size uint64) { + luteEngine := util.NewLute() // 不关注用户的自定义解析渲染选项 + renderer := render.NewJSONRenderer(tree, luteEngine.RenderOptions) + return uint64(len(renderer.Render())) +} + func WriteTree(tree *parse.Tree) (size uint64, err error) { data, filePath, err := prepareWriteTree(tree) if err != nil { diff --git a/kernel/model/box.go b/kernel/model/box.go index 966c6ab61..16768373c 100644 --- a/kernel/model/box.go +++ b/kernel/model/box.go @@ -473,6 +473,8 @@ func moveTree(tree *parse.Tree) { box := Conf.Box(tree.Box) box.renameSubTrees(tree) + + refreshDocInfo(tree) } func (box *Box) renameSubTrees(tree *parse.Tree) { diff --git a/kernel/model/file.go b/kernel/model/file.go index 567db8110..b7759cf57 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -933,7 +933,7 @@ func writeTreeUpsertQueue(tree *parse.Tree) (err error) { return } sql.UpsertTreeQueue(tree) - refreshDocInfo(tree, size) + refreshDocInfoWithSize(tree, size) return } @@ -959,7 +959,7 @@ func renameWriteJSONQueue(tree *parse.Tree) (err error) { } sql.RenameTreeQueue(tree) treenode.UpsertBlockTree(tree) - refreshDocInfo(tree, size) + refreshDocInfoWithSize(tree, size) return } @@ -1371,6 +1371,8 @@ func moveDoc(fromBox *Box, fromPath string, toBox *Box, toPath string, luteEngin return } + fromParentTree := loadParentTree(tree) + moveToRoot := "/" == toPath toBlockID := tree.ID fromFolder := path.Join(path.Dir(fromPath), tree.ID) @@ -1489,6 +1491,8 @@ func moveDoc(fromBox *Box, fromPath string, toBox *Box, toPath string, luteEngin } evt.Callback = callback util.PushEvent(evt) + + refreshDocInfo(fromParentTree) return } diff --git a/kernel/model/push_reload.go b/kernel/model/push_reload.go index 384a18be9..e4cd526aa 100644 --- a/kernel/model/push_reload.go +++ b/kernel/model/push_reload.go @@ -18,7 +18,6 @@ package model import ( "os" - "path" "path/filepath" "strings" "time" @@ -38,25 +37,22 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) -func refreshDocInfo(tree *parse.Tree, size uint64) { +func refreshDocInfo(tree *parse.Tree) { + refreshDocInfoWithSize(tree, filesys.TreeSize(tree)) +} + +func refreshDocInfoWithSize(tree *parse.Tree, size uint64) { refreshDocInfo0(tree, size) refreshParentDocInfo(tree) } func refreshParentDocInfo(tree *parse.Tree) { + parentTree := loadParentTree(tree) + if nil == parentTree { + return + } + luteEngine := lute.New() - boxDir := filepath.Join(util.DataDir, tree.Box) - parentDir := path.Dir(tree.Path) - if parentDir == boxDir || parentDir == "/" { - return - } - - parentPath := parentDir + ".sy" - parentTree, err := filesys.LoadTree(tree.Box, parentPath, luteEngine) - if err != nil { - return - } - renderer := render.NewJSONRenderer(parentTree, luteEngine.RenderOptions) data := renderer.Render() refreshDocInfo0(parentTree, uint64(len(data))) diff --git a/kernel/model/tree.go b/kernel/model/tree.go index cf2ee944e..59b93dfc6 100644 --- a/kernel/model/tree.go +++ b/kernel/model/tree.go @@ -305,3 +305,16 @@ func indexTreeInFilesystem(rootID string) { sql.IndexTreeQueue(tree) logging.LogInfof("reindexed tree by filesystem [rootID=%s]", rootID) } + +func loadParentTree(tree *parse.Tree) (ret *parse.Tree) { + boxDir := filepath.Join(util.DataDir, tree.Box) + parentDir := path.Dir(tree.Path) + if parentDir == boxDir || parentDir == "/" { + return + } + + luteEngine := lute.New() + parentPath := parentDir + ".sy" + ret, _ = filesys.LoadTree(tree.Box, parentPath, luteEngine) + return +}