diff --git a/kernel/av/av.go b/kernel/av/av.go index 4d9e6f844..222d5b143 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -29,6 +29,7 @@ import ( "github.com/88250/gulu" "github.com/88250/lute/ast" + jsoniter "github.com/json-iterator/go" "github.com/siyuan-note/filelock" "github.com/siyuan-note/logging" "github.com/siyuan-note/siyuan/kernel/util" @@ -212,6 +213,26 @@ func NewAttributeView(id string) (ret *AttributeView) { return } +func GetAttributeViewName(avID string) (ret string, err error) { + avJSONPath := GetAttributeViewDataPath(avID) + if !filelock.IsExist(avJSONPath) { + return + } + + data, err := filelock.ReadFile(avJSONPath) + if nil != err { + logging.LogErrorf("read attribute view [%s] failed: %s", avID, err) + return + } + + val := jsoniter.Get(data, "name") + if nil == val || val.ValueType() == jsoniter.InvalidValue { + return + } + ret = val.ToString() + return +} + func IsAttributeViewExist(avID string) bool { avJSONPath := GetAttributeViewDataPath(avID) return filelock.IsExist(avJSONPath) diff --git a/kernel/model/file.go b/kernel/model/file.go index b5d201712..662280ecb 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -17,6 +17,7 @@ package model import ( + "bytes" "errors" "fmt" "os" @@ -40,6 +41,7 @@ import ( "github.com/siyuan-note/filelock" "github.com/siyuan-note/logging" "github.com/siyuan-note/riff" + "github.com/siyuan-note/siyuan/kernel/av" "github.com/siyuan-note/siyuan/kernel/cache" "github.com/siyuan-note/siyuan/kernel/filesys" "github.com/siyuan-note/siyuan/kernel/search" @@ -731,6 +733,28 @@ func GetDoc(startID, endID, id string, index int, query string, queryTypes map[s } } + if avs := n.IALAttr(av.NodeAttrNameAvs); "" != avs { + // 填充属性视图名称 + avNames := bytes.Buffer{} + avIDs := strings.Split(avs, ",") + for _, avID := range avIDs { + avName, getErr := av.GetAttributeViewName(avID) + if nil != getErr { + continue + } + + if "" == avName { + avName = "Untitled" + } + avNames.WriteString(avName) + avNames.WriteString(",") + } + if 0 < avNames.Len() { + avNames.Truncate(avNames.Len() - 1) + n.SetIALAttr("av-names", avNames.String()) + } + } + if "" != n.ID { // 填充块引计数 if cnt := refCount[n.ID]; 0 < cnt {