🎨 Add kernel API /api/filetree/getIDsByHPath https://github.com/siyuan-note/siyuan/issues/9654

This commit is contained in:
Daniel 2023-11-15 09:08:41 +08:00
parent 8eb5e53f81
commit 38099e4892
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
6 changed files with 115 additions and 2 deletions

30
API.md
View file

@ -415,7 +415,7 @@ View API token in <kbd>Settings - About</kbd>, request header: `Authorization: T
}
```
### Get human readable path based on path
### Get human-readable path based on path
* `/api/filetree/getHPathByPath`
* Parameters
@ -439,7 +439,7 @@ View API token in <kbd>Settings - About</kbd>, request header: `Authorization: T
}
```
### Get human readable path based on ID
### Get human-readable path based on ID
* `/api/filetree/getHPathByID`
* Parameters
@ -461,6 +461,32 @@ View API token in <kbd>Settings - About</kbd>, request header: `Authorization: T
}
```
### Get IDs based on human-readable path
* `/api/filetree/getIDsByHPath`
* Parameters
```json
{
"path": "/foo/bar",
"notebook": "20210808180117-czj9bvb"
}
```
* `path`: Human-readable path
* `notebook`: Notebook ID
* Return value
```json
{
"code": 0,
"msg": "",
"data": [
"20200813004931-q4cu8na"
]
}
```
## Assets
### Upload assets

View file

@ -19,6 +19,7 @@
* [移动文档](#移动文档)
* [根据路径获取人类可读路径](#根据路径获取人类可读路径)
* [根据 ID 获取人类可读路径](#根据-ID-获取人类可读路径)
* [根据人类可读路径获取 IDs](#根据人类可读路径获取-IDs)
* [资源文件](#资源文件)
* [上传资源文件](#上传资源文件)
* [](#块)
@ -459,6 +460,32 @@
}
```
### 根据人类可读路径获取 IDs
* `/api/filetree/getIDsByHPath`
* 参数
```json
{
"path": "/foo/bar",
"notebook": "20210808180117-czj9bvb"
}
```
* `path`:人类可读路径
* `notebook`:笔记本 ID
* 返回值
```json
{
"code": 0,
"msg": "",
"data": [
"20200813004931-q4cu8na"
]
}
```
## 资源文件
### 上传资源文件

View file

@ -249,6 +249,36 @@ func getFullHPathByID(c *gin.Context) {
ret.Data = hPath
}
func getIDsByHPath(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
arg, ok := util.JsonArg(c, ret)
if !ok {
return
}
if nil == arg["path"] {
return
}
if nil == arg["notebook"] {
return
}
notebook := arg["notebook"].(string)
if util.InvalidIDPattern(notebook, ret) {
return
}
p := arg["path"].(string)
ids, err := model.GetIDsByHPath(p, notebook)
if nil != err {
ret.Code = -1
ret.Msg = err.Error()
return
}
ret.Data = ids
}
func moveDocs(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)

View file

@ -106,6 +106,7 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/filetree/getHPathsByPaths", model.CheckAuth, getHPathsByPaths)
ginServer.Handle("POST", "/api/filetree/getHPathByID", model.CheckAuth, getHPathByID)
ginServer.Handle("POST", "/api/filetree/getFullHPathByID", model.CheckAuth, getFullHPathByID)
ginServer.Handle("POST", "/api/filetree/getIDsByHPath", model.CheckAuth, getIDsByHPath)
ginServer.Handle("POST", "/api/filetree/doc2Heading", model.CheckAuth, model.CheckReadonly, doc2Heading)
ginServer.Handle("POST", "/api/filetree/heading2Doc", model.CheckAuth, model.CheckReadonly, heading2Doc)
ginServer.Handle("POST", "/api/filetree/li2Doc", model.CheckAuth, model.CheckReadonly, li2Doc)

View file

@ -1183,6 +1183,19 @@ func GetFullHPathByID(id string) (hPath string, err error) {
return
}
func GetIDsByHPath(hpath, boxID string) (ret []string, err error) {
roots := treenode.GetBlockTreeRootsByHPath(boxID, hpath)
if 1 > len(roots) {
return
}
for _, root := range roots {
ret = append(ret, root.ID)
}
ret = gulu.Str.RemoveDuplicatedElem(ret)
return
}
func MoveDocs(fromPaths []string, toBoxID, toPath string, callback interface{}) (err error) {
toBox := Conf.Box(toBoxID)
if nil == toBox {

View file

@ -143,6 +143,22 @@ func GetBlockTreeRootByHPath(boxID, hPath string) (ret *BlockTree) {
return
}
func GetBlockTreeRootsByHPath(boxID, hPath string) (ret []*BlockTree) {
hPath = gulu.Str.RemoveInvisible(hPath)
blockTrees.Range(func(key, value interface{}) bool {
slice := value.(*btSlice)
slice.m.Lock()
for _, b := range slice.data {
if b.BoxID == boxID && b.HPath == hPath && b.RootID == b.ID {
ret = append(ret, b)
}
}
slice.m.Unlock()
return true
})
return
}
func GetBlockTreeRootByHPathPreferredParentID(boxID, hPath, preferredParentID string) (ret *BlockTree) {
hPath = gulu.Str.RemoveInvisible(hPath)
var roots []*BlockTree