From 89536ceb1905d8e2ba041ff3795a6d2c65b54189 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sun, 1 Feb 2026 10:20:50 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/11569#issuecomment-3828712765 Signed-off-by: Daniel <845765@qq.com> --- kernel/api/av.go | 16 +++++++++++----- kernel/av/av.go | 7 ++++--- kernel/model/attribute_view_render.go | 7 ++++++- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/kernel/api/av.go b/kernel/api/av.go index 779c23680..ab4cfc2c3 100644 --- a/kernel/api/av.go +++ b/kernel/api/av.go @@ -212,7 +212,7 @@ func setAttrViewGroup(c *gin.Context) { return } - ret = renderAttrView(blockID, avID, "", "", 1, -1, nil) + ret = renderAttrView(blockID, avID, "", "", 1, -1, nil, false) c.JSON(http.StatusOK, ret) } @@ -235,7 +235,7 @@ func changeAttrViewLayout(c *gin.Context) { return } - ret = renderAttrView(blockID, avID, "", "", 1, -1, nil) + ret = renderAttrView(blockID, avID, "", "", 1, -1, nil, false) c.JSON(http.StatusOK, ret) } @@ -864,13 +864,19 @@ func renderAttributeView(c *gin.Context) { groupPaging = groupPagingArg.(map[string]interface{}) } - ret = renderAttrView(blockID, id, viewID, query, page, pageSize, groupPaging) + createIfNotExist := true + createIfNotExistArg := arg["createIfNotExist"] + if nil != createIfNotExistArg { + createIfNotExist = createIfNotExistArg.(bool) + } + + ret = renderAttrView(blockID, id, viewID, query, page, pageSize, groupPaging, createIfNotExist) c.JSON(http.StatusOK, ret) } -func renderAttrView(blockID, avID, viewID, query string, page, pageSize int, groupPaging map[string]interface{}) (ret *gulu.Result) { +func renderAttrView(blockID, avID, viewID, query string, page, pageSize int, groupPaging map[string]interface{}, createIfNotExist bool) (ret *gulu.Result) { ret = gulu.Ret.NewResult() - view, attrView, err := model.RenderAttributeView(blockID, avID, viewID, query, page, pageSize, groupPaging) + view, attrView, err := model.RenderAttributeView(blockID, avID, viewID, query, page, pageSize, groupPaging, createIfNotExist) if err != nil { ret.Code = -1 ret.Msg = err.Error() diff --git a/kernel/av/av.go b/kernel/av/av.go index c2424eb6c..95aaf5d2e 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -877,9 +877,10 @@ func GetAttributeViewI18n(key string) string { } var ( - ErrViewNotFound = errors.New("view not found") - ErrKeyNotFound = errors.New("key not found") - ErrWrongLayoutType = errors.New("wrong layout type") + ErrAttributeViewNotFound = errors.New("attribute view not found") + ErrViewNotFound = errors.New("view not found") + ErrKeyNotFound = errors.New("key not found") + ErrWrongLayoutType = errors.New("wrong layout type") ) const ( diff --git a/kernel/model/attribute_view_render.go b/kernel/model/attribute_view_render.go index cb2c44bcf..5b78d21d3 100644 --- a/kernel/model/attribute_view_render.go +++ b/kernel/model/attribute_view_render.go @@ -35,10 +35,15 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) -func RenderAttributeView(blockID, avID, viewID, query string, page, pageSize int, groupPaging map[string]interface{}) (viewable av.Viewable, attrView *av.AttributeView, err error) { +func RenderAttributeView(blockID, avID, viewID, query string, page, pageSize int, groupPaging map[string]interface{}, createIfNotExist bool) (viewable av.Viewable, attrView *av.AttributeView, err error) { waitForSyncingStorages() if avJSONPath := av.GetAttributeViewDataPath(avID); !filelock.IsExist(avJSONPath) { + if !createIfNotExist { + err = av.ErrAttributeViewNotFound + return + } + attrView = av.NewAttributeView(avID) if err = av.SaveAttributeView(attrView); err != nil { logging.LogErrorf("save attribute view [%s] failed: %s", avID, err)