From 5ebb7f10b0fd70d347dc10db5e0196f19c8b975d Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sun, 8 Oct 2023 20:10:17 +0800 Subject: [PATCH] :art: Document-level new card/review card limit control https://github.com/siyuan-note/siyuan/issues/9365 --- kernel/model/flashcard.go | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/kernel/model/flashcard.go b/kernel/model/flashcard.go index 8717d6cd8..cd1d42c1f 100644 --- a/kernel/model/flashcard.go +++ b/kernel/model/flashcard.go @@ -21,6 +21,7 @@ import ( "os" "path/filepath" "sort" + "strconv" "strings" "sync" "time" @@ -390,7 +391,7 @@ func GetNotebookDueFlashcards(boxID string, reviewedCardIDs []string) (ret []*Fl return } - cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs) + cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit) now := time.Now() for _, card := range cards { blockID := card.BlockID() @@ -415,7 +416,26 @@ func GetTreeDueFlashcards(rootID string, reviewedCardIDs []string) (ret []*Flash } _, treeBlockIDs := getTreeSubTreeChildBlocks(rootID) - cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs) + newCardLimit := Conf.Flashcard.NewCardLimit + reviewCardLimit := Conf.Flashcard.ReviewCardLimit + // 文档级新卡/复习卡上限控制 Document-level new card/review card limit control https://github.com/siyuan-note/siyuan/issues/9365 + ial := GetBlockAttrs(rootID) + if newCardLimitStr := ial["custom-riff-new-card-limit"]; "" != newCardLimitStr { + var convertErr error + newCardLimit, convertErr = strconv.Atoi(newCardLimitStr) + if nil != convertErr { + logging.LogWarnf("invalid new card limit [%s]: %s", newCardLimitStr, convertErr) + } + } + if reviewCardLimitStr := ial["custom-riff-review-card-limit"]; "" != reviewCardLimitStr { + var convertErr error + reviewCardLimit, convertErr = strconv.Atoi(reviewCardLimitStr) + if nil != convertErr { + logging.LogWarnf("invalid review card limit [%s]: %s", reviewCardLimitStr, convertErr) + } + } + + cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs, newCardLimit, reviewCardLimit) now := time.Now() for _, card := range cards { blockID := card.BlockID() @@ -485,7 +505,7 @@ func getDueFlashcards(deckID string, reviewedCardIDs []string) (ret []*Flashcard return } - cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, nil) + cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, nil, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit) now := time.Now() for _, card := range cards { blockID := card.BlockID() @@ -506,7 +526,7 @@ func getDueFlashcards(deckID string, reviewedCardIDs []string) (ret []*Flashcard func getAllDueFlashcards(reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount int) { now := time.Now() for _, deck := range Decks { - cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, nil) + cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, nil, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit) unreviewedCount += unreviewedCnt for _, card := range cards { blockID := card.BlockID() @@ -874,7 +894,7 @@ func getDeckIDs() (deckIDs []string) { return } -func getDeckDueCards(deck *riff.Deck, reviewedCardIDs, blockIDs []string) (ret []riff.Card, unreviewedCount int) { +func getDeckDueCards(deck *riff.Deck, reviewedCardIDs, blockIDs []string, newCardLimit, reviewCardLimit int) (ret []riff.Card, unreviewedCount int) { ret = []riff.Card{} dues := deck.Dues() @@ -911,12 +931,12 @@ func getDeckDueCards(deck *riff.Deck, reviewedCardIDs, blockIDs []string) (ret [ fsrsCard := c.Impl().(*fsrs.Card) if fsrs.New == fsrsCard.State { newCount++ - if newCount > Conf.Flashcard.NewCardLimit { + if newCount > newCardLimit { continue } } else { reviewCount++ - if reviewCount > Conf.Flashcard.ReviewCardLimit { + if reviewCount > reviewCardLimit { continue } }