ソースを参照

:art: The database primary key field displays the icon of the bound doc https://github.com/siyuan-note/siyuan/issues/13378

Daniel 7 ヶ月 前
コミット
807f0df86f

+ 1 - 0
kernel/av/value.go

@@ -371,6 +371,7 @@ func (value *Value) GetValByType(typ KeyType) (ret interface{}) {
 
 type ValueBlock struct {
 	ID      string `json:"id"`
+	Icon    string `json:"icon"`
 	Content string `json:"content"`
 	Created int64  `json:"created"`
 	Updated int64  `json:"updated"`

+ 5 - 3
kernel/model/attribute_view.go

@@ -1980,8 +1980,9 @@ func addAttributeViewBlock(now int64, avID, blockID, previousBlockID, addingBloc
 		return
 	}
 
+	var blockIcon string
 	if !isDetached {
-		addingBlockContent = getNodeAvBlockText(node)
+		blockIcon, addingBlockContent = getNodeAvBlockText(node)
 	}
 
 	// 检查是否重复添加相同的块
@@ -1992,6 +1993,7 @@ func addAttributeViewBlock(now int64, avID, blockID, previousBlockID, addingBloc
 				// 重复绑定一下,比如剪切数据库块、取消绑定块后再次添加的场景需要
 				bindBlockAv0(tx, avID, node, tree)
 				blockValue.IsDetached = isDetached
+				blockValue.Block.Icon = blockIcon
 				blockValue.Block.Content = addingBlockContent
 				blockValue.UpdatedAt = now
 				err = av.SaveAttributeView(attrView)
@@ -2936,7 +2938,7 @@ func replaceAttributeViewBlock(operation *Operation, tx *Transaction) (err error
 				if !operation.IsDetached {
 					bindBlockAv0(tx, operation.AvID, node, tree)
 					value.IsDetached = false
-					value.Block.Content = getNodeAvBlockText(node)
+					value.Block.Icon, value.Block.Content = getNodeAvBlockText(node)
 					value.UpdatedAt = now
 					err = av.SaveAttributeView(attrView)
 				}
@@ -2973,7 +2975,7 @@ func replaceAttributeViewBlock(operation *Operation, tx *Transaction) (err error
 				value.Block.ID = operation.NextID
 				value.IsDetached = operation.IsDetached
 				if !operation.IsDetached {
-					value.Block.Content = getNodeAvBlockText(node)
+					value.Block.Icon, value.Block.Content = getNodeAvBlockText(node)
 				}
 			}
 

+ 5 - 8
kernel/model/blockinfo.go

@@ -268,22 +268,19 @@ func getNodeRefText(node *ast.Node) string {
 	return getNodeRefText0(node, Conf.Editor.BlockRefDynamicAnchorTextMaxLen)
 }
 
-func getNodeAvBlockText(node *ast.Node) (ret string) {
+func getNodeAvBlockText(node *ast.Node) (icon, content string) {
 	if nil == node {
-		return ""
+		return
 	}
 
+	icon = node.IALAttr("icon")
 	if name := node.IALAttr("name"); "" != name {
 		name = strings.TrimSpace(name)
 		name = util.EscapeHTML(name)
-		ret = name
+		content = name
 	} else {
-		ret = getNodeRefText0(node, 1024)
+		content = getNodeRefText0(node, 1024)
 	}
-
-	//if icon := node.IALAttr("icon"); "" != icon {
-	//	ret = icon + " " + ret
-	//}
 	return
 }
 

+ 5 - 1
kernel/model/push_reload.go

@@ -269,7 +269,11 @@ func refreshDynamicRefTexts(updatedDefNodes map[string]*ast.Node, updatedTrees m
 
 			for _, blockValue := range blockValues.Values {
 				if blockValue.Block.ID == updatedDefNode.ID {
-					newContent := getNodeAvBlockText(updatedDefNode)
+					newIcon, newContent := getNodeAvBlockText(updatedDefNode)
+					if newIcon != blockValue.Block.Icon {
+						blockValue.Block.Icon = newIcon
+						changedAv = true
+					}
 					if newContent != blockValue.Block.Content {
 						blockValue.Block.Content = newContent
 						changedAv = true