🎨 Add internal kernel API /api/repo/getRepoFile https://github.com/siyuan-note/siyuan/issues/10101

This commit is contained in:
Daniel 2024-01-08 19:47:17 +08:00
parent 2017494493
commit ae2fb32569
No known key found for this signature in database
GPG Key ID: 86211BA83DF03017
3 changed files with 66 additions and 10 deletions

View File

@ -18,14 +18,48 @@ package api
import (
"fmt"
"mime"
"net/http"
"path/filepath"
"github.com/88250/gulu"
"github.com/gabriel-vasile/mimetype"
"github.com/gin-gonic/gin"
"github.com/siyuan-note/siyuan/kernel/model"
"github.com/siyuan-note/siyuan/kernel/util"
)
func getRepoFile(c *gin.Context) {
// Add internal kernel API `/api/repo/getRepoFile` https://github.com/siyuan-note/siyuan/issues/10101
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
arg, ok := util.JsonArg(c, ret)
if !ok {
return
}
id := arg["id"].(string)
data, p, err := model.GetRepoFile(id)
if nil != err {
ret.Code = -1
ret.Msg = err.Error()
return
}
contentType := mime.TypeByExtension(filepath.Ext(p))
if "" == contentType {
if m := mimetype.Detect(data); nil != m {
contentType = m.String()
}
}
if "" == contentType {
contentType = "application/octet-stream"
}
c.Data(http.StatusOK, contentType, data)
}
func openRepoSnapshotDoc(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)

View File

@ -363,6 +363,7 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/repo/downloadCloudSnapshot", model.CheckAuth, model.CheckReadonly, downloadCloudSnapshot)
ginServer.Handle("POST", "/api/repo/diffRepoSnapshots", model.CheckAuth, diffRepoSnapshots)
ginServer.Handle("POST", "/api/repo/openRepoSnapshotDoc", model.CheckAuth, openRepoSnapshotDoc)
ginServer.Handle("POST", "/api/repo/getRepoFile", model.CheckAuth, getRepoFile)
ginServer.Handle("POST", "/api/riff/createRiffDeck", model.CheckAuth, model.CheckReadonly, createRiffDeck)
ginServer.Handle("POST", "/api/riff/renameRiffDeck", model.CheckAuth, model.CheckReadonly, renameRiffDeck)

View File

@ -57,18 +57,25 @@ import (
"github.com/studio-b12/gowebdav"
)
func init() {
subscribeRepoEvents()
}
func GetRepoFile(fileID string) (ret []byte, p string, err error) {
if 1 > len(Conf.Repo.Key) {
err = errors.New(Conf.Language(26))
return
}
type Snapshot struct {
*dejavu.Log
TypesCount []*TypeCount `json:"typesCount"`
}
repo, err := newRepository()
if nil != err {
return
}
type TypeCount struct {
Type string `json:"type"`
Count int `json:"count"`
file, err := repo.GetFile(fileID)
if nil != err {
return
}
ret, err = repo.OpenFile(file)
p = file.Path
return
}
func OpenRepoSnapshotDoc(fileID string) (content string, isProtyleDoc bool, updated int64, err error) {
@ -327,6 +334,16 @@ func parseTreeInSnapshot(data []byte, luteEngine *lute.Lute) (isProtyleDoc bool,
return
}
type Snapshot struct {
*dejavu.Log
TypesCount []*TypeCount `json:"typesCount"`
}
type TypeCount struct {
Type string `json:"type"`
Count int `json:"count"`
}
func GetRepoSnapshots(page int) (ret []*Snapshot, pageCount, totalCount int, err error) {
ret = []*Snapshot{}
if 1 > len(Conf.Repo.Key) {
@ -1570,6 +1587,10 @@ func newRepository() (ret *dejavu.Repo, err error) {
return
}
func init() {
subscribeRepoEvents()
}
func subscribeRepoEvents() {
eventbus.Subscribe(eventbus.EvtIndexBeforeWalkData, func(context map[string]interface{}, path string) {
msg := fmt.Sprintf(Conf.Language(158), path)