🧑‍💻 Add internal kernel API /api/block/getBlocksIndexes Fix https://github.com/siyuan-note/siyuan/issues/10608

This commit is contained in:
Daniel 2024-03-15 19:34:59 +08:00
parent 0daa752ba9
commit 095dfc2b35
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
3 changed files with 52 additions and 0 deletions

View file

@ -436,6 +436,24 @@ func getBlockIndex(c *gin.Context) {
ret.Data = index
}
func getBlocksIndexes(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
arg, ok := util.JsonArg(c, ret)
if !ok {
return
}
idsArg := arg["ids"].([]interface{})
var ids []string
for _, id := range idsArg {
ids = append(ids, id.(string))
}
index := model.GetBlocksIndexes(ids)
ret.Data = index
}
func getBlockInfo(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)

View file

@ -168,6 +168,7 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/block/getTailChildBlocks", model.CheckAuth, getTailChildBlocks)
ginServer.Handle("POST", "/api/block/getBlockBreadcrumb", model.CheckAuth, getBlockBreadcrumb)
ginServer.Handle("POST", "/api/block/getBlockIndex", model.CheckAuth, getBlockIndex)
ginServer.Handle("POST", "/api/block/getBlocksIndexes", model.CheckAuth, getBlocksIndexes)
ginServer.Handle("POST", "/api/block/getRefIDs", model.CheckAuth, getRefIDs)
ginServer.Handle("POST", "/api/block/getRefIDsByFileAnnotationID", model.CheckAuth, getRefIDsByFileAnnotationID)
ginServer.Handle("POST", "/api/block/getBlockDefIDsByRefText", model.CheckAuth, getBlockDefIDsByRefText)

View file

@ -274,6 +274,39 @@ func GetBlockIndex(id string) (ret int) {
return
}
func GetBlocksIndexes(ids []string) (ret map[string]int) {
ret = map[string]int{}
if 1 > len(ids) {
return
}
tree, _ := LoadTreeByBlockID(ids[0])
if nil == tree {
return
}
idx := 0
nodesIndexes := map[string]int{}
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
if !entering {
return ast.WalkContinue
}
if !n.IsChildBlockOf(tree.Root, 1) {
return ast.WalkContinue
}
nodesIndexes[n.ID] = idx
idx++
return ast.WalkContinue
})
for _, id := range ids {
ret[id] = nodesIndexes[id]
}
return
}
type BlockPath struct {
ID string `json:"id"`
Name string `json:"name"`