🎨 Add kernel API /api/riff/getRiffCardsByBlockIDs Fix https://github.com/siyuan-note/siyuan/issues/10535

This commit is contained in:
Daniel 2024-03-07 20:36:47 +08:00
parent d55dcf1bf7
commit e083dacca8
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
4 changed files with 54 additions and 4 deletions

View file

@ -27,6 +27,33 @@ import (
"github.com/siyuan-note/siyuan/kernel/util"
)
func getRiffCardsByBlockIDs(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
arg, ok := util.JsonArg(c, ret)
if !ok {
return
}
blockIDsArg := arg["blockIDs"].([]interface{})
var blockIDs []string
for _, blockID := range blockIDsArg {
blockIDs = append(blockIDs, blockID.(string))
}
page := int(arg["page"].(float64))
pageSize := 20
if nil != arg["pageSize"] {
pageSize = int(arg["pageSize"].(float64))
}
blocks, total, pageCount := model.GetFlashcardsByBlockIDs(blockIDs, page, pageSize)
ret.Data = map[string]interface{}{
"blocks": blocks,
"total": total,
"pageCount": pageCount,
}
}
func batchSetRiffCardsDueTime(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)

View file

@ -387,6 +387,7 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/riff/getNotebookRiffCards", model.CheckAuth, getNotebookRiffCards)
ginServer.Handle("POST", "/api/riff/resetRiffCards", model.CheckAuth, model.CheckReadonly, resetRiffCards)
ginServer.Handle("POST", "/api/riff/batchSetRiffCardsDueTime", model.CheckAuth, model.CheckReadonly, batchSetRiffCardsDueTime)
ginServer.Handle("POST", "/api/riff/getRiffCardsByBlockIDs", model.CheckAuth, model.CheckReadonly, getRiffCardsByBlockIDs)
ginServer.Handle("POST", "/api/notification/pushMsg", model.CheckAuth, pushMsg)
ginServer.Handle("POST", "/api/notification/pushErrMsg", model.CheckAuth, pushErrMsg)

View file

@ -67,8 +67,11 @@ type Block struct {
}
type RiffCard struct {
Due time.Time `json:"due"`
Reps uint64 `json:"reps"`
Due time.Time `json:"due"`
Reps uint64 `json:"reps"`
Lapses uint64 `json:"lapses"`
State fsrs.State `json:"state"`
LastReview time.Time `json:"lastReview"`
}
func getRiffCard(card *fsrs.Card) *RiffCard {
@ -78,8 +81,11 @@ func getRiffCard(card *fsrs.Card) *RiffCard {
}
return &RiffCard{
Due: due,
Reps: card.Reps,
Due: due,
Reps: card.Reps,
Lapses: card.Lapses,
State: card.State,
LastReview: card.LastReview,
}
}

View file

@ -38,6 +38,22 @@ import (
"github.com/siyuan-note/siyuan/kernel/util"
)
func GetFlashcardsByBlockIDs(blockIDs []string, page, pageSize int) (blocks []*Block, total, pageCount int) {
deckLock.Lock()
defer deckLock.Unlock()
waitForSyncingStorages()
deck := Decks[builtinDeckID]
if nil == deck {
return
}
cards := deck.GetCardsByBlockIDs(blockIDs)
blocks, total, pageCount = getCardsBlocks(cards, page, pageSize)
return
}
type SetFlashcardDueTime struct {
ID string `json:"id"` // 卡片 ID
Due string `json:"due"` // 下次复习时间,格式为 YYYYMMDDHHmmss