diff --git a/kernel/api/block_op.go b/kernel/api/block_op.go index 7ee23b74e..b2f41fd55 100644 --- a/kernel/api/block_op.go +++ b/kernel/api/block_op.go @@ -73,7 +73,7 @@ func buildUpdatedTaskListItemBlockDOM(id, marker string, luteEngine *lute.Lute) markerNode.TaskListItemMarker = liMarker markerNode.TaskListItemChecked = ' ' != markerNode.TaskListItemMarker - li.SetIALAttr("updated", util.CurrentTimeSecondsStr()) + treenode.RefreshUpdated(li) return luteEngine.RenderNodeBlockDOM(li), nil } diff --git a/kernel/model/block.go b/kernel/model/block.go index cab2e164b..d2b00b268 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -507,8 +507,8 @@ func SwapBlockRef(refID, defID string, includeChildren bool) (err error) { } } - refreshUpdated(defNode) - refreshUpdated(refNode) + treenode.RefreshUpdated(defNode) + treenode.RefreshUpdated(refNode) refPivot := treenode.NewParagraph("") refNode.InsertBefore(refPivot) diff --git a/kernel/model/search.go b/kernel/model/search.go index 9d63fec55..253f9a80b 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -1087,7 +1087,7 @@ func replaceTextNode(text *ast.Node, method int, keyword string, replacement str text.InsertBefore(rNode) } block := treenode.ParentBlock(text) - refreshUpdated(block) + treenode.RefreshUpdated(block) return true } } else if 3 == method { @@ -1107,7 +1107,7 @@ func replaceTextNode(text *ast.Node, method int, keyword string, replacement str text.InsertBefore(rNode) } block := treenode.ParentBlock(text) - refreshUpdated(block) + treenode.RefreshUpdated(block) return true } } diff --git a/kernel/model/template.go b/kernel/model/template.go index fcde90213..8141ab97e 100644 --- a/kernel/model/template.go +++ b/kernel/model/template.go @@ -374,7 +374,7 @@ func RenderTemplate(p, id string, preview bool) (tree *parse.Tree, dom string, e n.RemoveIALAttr(av.NodeAttrNameAvs) // Blocks created via template update time earlier than creation time https://github.com/siyuan-note/siyuan/issues/8607 - refreshUpdated(n) + treenode.RefreshUpdated(n) } if (ast.NodeListItem == n.Type && (nil == n.FirstChild || diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 4144956df..67f66f804 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -526,9 +526,9 @@ func (tx *Transaction) doMove(operation *Operation) (ret *TxErr) { srcEmptyList.Unlink() } - refreshUpdated(srcNode) + treenode.RefreshUpdated(srcNode) tx.nodes[srcNode.ID] = srcNode - refreshUpdated(srcTree.Root) + treenode.RefreshUpdated(srcTree.Root) tx.writeTree(srcTree) if !isSameTree { tx.writeTree(targetTree) @@ -607,9 +607,9 @@ func (tx *Transaction) doMove(operation *Operation) (ret *TxErr) { } } - refreshUpdated(srcNode) + treenode.RefreshUpdated(srcNode) tx.nodes[srcNode.ID] = srcNode - refreshUpdated(srcTree.Root) + treenode.RefreshUpdated(srcTree.Root) tx.writeTree(srcTree) if !isSameTree { tx.writeTree(targetTree) @@ -715,11 +715,11 @@ func (tx *Transaction) doPrependInsert(operation *Operation) (ret *TxErr) { node.InsertAfter(toInsert) } - createdUpdated(toInsert) + treenode.CreatedUpdated(toInsert) tx.nodes[toInsert.ID] = toInsert } - createdUpdated(insertedNode) + treenode.CreatedUpdated(insertedNode) tx.nodes[insertedNode.ID] = insertedNode tx.writeTree(tree) @@ -822,11 +822,11 @@ func (tx *Transaction) doAppendInsert(operation *Operation) (ret *TxErr) { } } - createdUpdated(toInsert) + treenode.CreatedUpdated(toInsert) tx.nodes[toInsert.ID] = toInsert } - createdUpdated(insertedNode) + treenode.CreatedUpdated(insertedNode) tx.nodes[insertedNode.ID] = insertedNode tx.writeTree(tree) @@ -1313,7 +1313,7 @@ func (tx *Transaction) doInsert0(operation *Operation, tree *parse.Tree) (ret *T } } - createdUpdated(insertedNode) + treenode.CreatedUpdated(insertedNode) tx.nodes[insertedNode.ID] = insertedNode // 收集引用的定义块 ID @@ -1565,7 +1565,7 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) { }() } - createdUpdated(updatedNode) + treenode.CreatedUpdated(updatedNode) tx.nodes[updatedNode.ID] = updatedNode tx.writeTree(tree) @@ -1735,7 +1735,7 @@ func (tx *Transaction) doUpdateUpdated(operation *Operation) (ret *TxErr) { } node.SetIALAttr("updated", operation.Data.(string)) - createdUpdated(node) + treenode.CreatedUpdated(node) tx.nodes[node.ID] = node tx.writeTree(tree) return @@ -1777,46 +1777,6 @@ func (tx *Transaction) doSetAttrs(operation *Operation) (ret *TxErr) { return } -func refreshUpdated(node *ast.Node) { - updated := util.CurrentTimeSecondsStr() - node.SetIALAttr("updated", updated) - parents := treenode.ParentNodesWithHeadings(node) - for _, parent := range parents { // 更新所有父节点的更新时间字段 - parent.SetIALAttr("updated", updated) - } -} - -func createdUpdated(node *ast.Node) { - // 补全子节点的更新时间 Improve block update time filling https://github.com/siyuan-note/siyuan/issues/12182 - ast.Walk(node, func(n *ast.Node, entering bool) ast.WalkStatus { - if !entering || !n.IsBlock() || ast.NodeKramdownBlockIAL == n.Type { - return ast.WalkContinue - } - - updated := n.IALAttr("updated") - if "" == updated && ast.IsNodeIDPattern(n.ID) { - created := util.TimeFromID(n.ID) - n.SetIALAttr("updated", created) - } - return ast.WalkContinue - }) - - created := util.TimeFromID(node.ID) - updated := node.IALAttr("updated") - if !util.IsTimeStr(updated) { - updated = created - node.SetIALAttr("updated", updated) - } - if updated < created { - updated = created - } - parents := treenode.ParentNodesWithHeadings(node) - for _, parent := range parents { // 更新所有父节点的更新时间字段 - parent.SetIALAttr("updated", updated) - cache.PutBlockIAL(parent.ID, parse.IAL2Map(parent.KramdownIAL)) - } -} - type Operation struct { Action string `json:"action"` Data any `json:"data"` diff --git a/kernel/treenode/node.go b/kernel/treenode/node.go index 265574cbc..24c268b03 100644 --- a/kernel/treenode/node.go +++ b/kernel/treenode/node.go @@ -486,3 +486,43 @@ func IsChartCodeBlockCode(code *ast.Node) bool { language = strings.ReplaceAll(language, editor.Caret, "") return render.NoHighlight(language) } + +func RefreshUpdated(node *ast.Node) { + updated := util.CurrentTimeSecondsStr() + node.SetIALAttr("updated", updated) + parents := ParentNodesWithHeadings(node) + for _, parent := range parents { // 更新所有父节点的更新时间字段 + parent.SetIALAttr("updated", updated) + } +} + +func CreatedUpdated(node *ast.Node) { + // 补全子节点的更新时间 Improve block update time filling https://github.com/siyuan-note/siyuan/issues/12182 + ast.Walk(node, func(n *ast.Node, entering bool) ast.WalkStatus { + if !entering || !n.IsBlock() || ast.NodeKramdownBlockIAL == n.Type { + return ast.WalkContinue + } + + updated := n.IALAttr("updated") + if "" == updated && ast.IsNodeIDPattern(n.ID) { + created := util.TimeFromID(n.ID) + n.SetIALAttr("updated", created) + } + return ast.WalkContinue + }) + + created := util.TimeFromID(node.ID) + updated := node.IALAttr("updated") + if !util.IsTimeStr(updated) { + updated = created + node.SetIALAttr("updated", updated) + } + if updated < created { + updated = created + } + parents := ParentNodesWithHeadings(node) + for _, parent := range parents { // 更新所有父节点的更新时间字段 + parent.SetIALAttr("updated", updated) + cache.PutBlockIAL(parent.ID, parse.IAL2Map(parent.KramdownIAL)) + } +}