diff --git a/kernel/api/av.go b/kernel/api/av.go index ffa427c09..3a037b0a0 100644 --- a/kernel/api/av.go +++ b/kernel/api/av.go @@ -26,6 +26,26 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func setDatabaseBlockView(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + blockID := arg["id"].(string) + viewID := arg["viewID"].(string) + + err := model.SetDatabaseBlockView(blockID, viewID) + if nil != err { + ret.Code = -1 + ret.Msg = err.Error() + return + } +} + func getAttributeViewPrimaryKeyValues(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) diff --git a/kernel/api/router.go b/kernel/api/router.go index f8fdc270b..791aef45b 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -410,6 +410,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/av/addAttributeViewValues", model.CheckAuth, model.CheckReadonly, addAttributeViewValues) ginServer.Handle("POST", "/api/av/removeAttributeViewValues", model.CheckAuth, model.CheckReadonly, removeAttributeViewValues) ginServer.Handle("POST", "/api/av/getAttributeViewPrimaryKeyValues", model.CheckAuth, model.CheckReadonly, getAttributeViewPrimaryKeyValues) + ginServer.Handle("POST", "/api/av/setDatabaseBlockView", model.CheckAuth, model.CheckReadonly, setDatabaseBlockView) ginServer.Handle("POST", "/api/ai/chatGPT", model.CheckAuth, chatGPT) ginServer.Handle("POST", "/api/ai/chatGPTWithAction", model.CheckAuth, chatGPTWithAction) diff --git a/kernel/av/av.go b/kernel/av/av.go index 0f3c7577e..834e64af4 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -524,5 +524,6 @@ var ( ) const ( - NodeAttrNameAvs = "custom-avs" // 用于标记块所属的属性视图,逗号分隔 av id + NodeAttrNameAvs = "custom-avs" // 用于标记块所属的属性视图,逗号分隔 av id + NodeAttrView = "custom-av-view" // 用于标记块所属的属性视图视图 view id Database block support specified view https://github.com/siyuan-note/siyuan/issues/10443 ) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index c58c6a62a..a50494f61 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -38,6 +38,22 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func SetDatabaseBlockView(blockID, viewID string) (err error) { + node, tree, err := getNodeByBlockID(nil, blockID) + if nil != err { + return + } + + attrs := parse.IAL2Map(node.KramdownIAL) + attrs[av.NodeAttrView] = viewID + err = setNodeAttrs(node, tree, attrs) + if nil != err { + logging.LogWarnf("set node [%s] attrs failed: %s", blockID, err) + return + } + return +} + func GetAttributeViewPrimaryKeyValues(avID string, page, pageSize int) (attributeViewName string, keyValues *av.KeyValues, err error) { waitForSyncingStorages() @@ -564,8 +580,12 @@ func renderAttributeView(attrView *av.AttributeView, viewID string, page, pageSi var view *av.View if "" != viewID { view = attrView.GetView(viewID) - if nil != view && viewID != attrView.ViewID { - attrView.ViewID = viewID + if nil == view { + view, _ = attrView.GetCurrentView() + } + + if nil != view && view.ID != attrView.ViewID { + attrView.ViewID = view.ID if err = av.SaveAttributeView(attrView); nil != err { logging.LogErrorf("save attribute view [%s] failed: %s", attrView.ID, err) return