mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-05-19 02:21:38 +08:00
🎨 Distinguish between new cards and review cards during spaced repetition https://github.com/siyuan-note/siyuan/issues/9377
This commit is contained in:
parent
4c8a57ec21
commit
30c902a01c
@ -158,7 +158,7 @@ func getNotebookRiffDueCards(c *gin.Context) {
|
|||||||
|
|
||||||
notebookID := arg["notebook"].(string)
|
notebookID := arg["notebook"].(string)
|
||||||
reviewedCardIDs := getReviewedCards(arg)
|
reviewedCardIDs := getReviewedCards(arg)
|
||||||
cards, unreviewedCount, err := model.GetNotebookDueFlashcards(notebookID, reviewedCardIDs)
|
cards, unreviewedCount, unreviewedNewCardCount, unreviewedOldCardCount, err := model.GetNotebookDueFlashcards(notebookID, reviewedCardIDs)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
ret.Code = -1
|
ret.Code = -1
|
||||||
ret.Msg = err.Error()
|
ret.Msg = err.Error()
|
||||||
@ -166,8 +166,10 @@ func getNotebookRiffDueCards(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret.Data = map[string]interface{}{
|
ret.Data = map[string]interface{}{
|
||||||
"cards": cards,
|
"cards": cards,
|
||||||
"unreviewedCount": unreviewedCount,
|
"unreviewedCount": unreviewedCount,
|
||||||
|
"unreviewedNewCardCount": unreviewedNewCardCount,
|
||||||
|
"unreviewedOldCardCount": unreviewedOldCardCount,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +184,7 @@ func getTreeRiffDueCards(c *gin.Context) {
|
|||||||
|
|
||||||
rootID := arg["rootID"].(string)
|
rootID := arg["rootID"].(string)
|
||||||
reviewedCardIDs := getReviewedCards(arg)
|
reviewedCardIDs := getReviewedCards(arg)
|
||||||
cards, unreviewedCount, err := model.GetTreeDueFlashcards(rootID, reviewedCardIDs)
|
cards, unreviewedCount, unreviewedNewCardCount, unreviewedOldCardCount, err := model.GetTreeDueFlashcards(rootID, reviewedCardIDs)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
ret.Code = -1
|
ret.Code = -1
|
||||||
ret.Msg = err.Error()
|
ret.Msg = err.Error()
|
||||||
@ -190,8 +192,10 @@ func getTreeRiffDueCards(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret.Data = map[string]interface{}{
|
ret.Data = map[string]interface{}{
|
||||||
"cards": cards,
|
"cards": cards,
|
||||||
"unreviewedCount": unreviewedCount,
|
"unreviewedCount": unreviewedCount,
|
||||||
|
"unreviewedNewCardCount": unreviewedNewCardCount,
|
||||||
|
"unreviewedOldCardCount": unreviewedOldCardCount,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,7 +210,7 @@ func getRiffDueCards(c *gin.Context) {
|
|||||||
|
|
||||||
deckID := arg["deckID"].(string)
|
deckID := arg["deckID"].(string)
|
||||||
reviewedCardIDs := getReviewedCards(arg)
|
reviewedCardIDs := getReviewedCards(arg)
|
||||||
cards, unreviewedCount, err := model.GetDueFlashcards(deckID, reviewedCardIDs)
|
cards, unreviewedCount, unreviewedNewCardCount, unreviewedOldCardCount, err := model.GetDueFlashcards(deckID, reviewedCardIDs)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
ret.Code = -1
|
ret.Code = -1
|
||||||
ret.Msg = err.Error()
|
ret.Msg = err.Error()
|
||||||
@ -214,8 +218,10 @@ func getRiffDueCards(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret.Data = map[string]interface{}{
|
ret.Data = map[string]interface{}{
|
||||||
"cards": cards,
|
"cards": cards,
|
||||||
"unreviewedCount": unreviewedCount,
|
"unreviewedCount": unreviewedCount,
|
||||||
|
"unreviewedNewCardCount": unreviewedNewCardCount,
|
||||||
|
"unreviewedOldCardCount": unreviewedOldCardCount,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -405,7 +405,7 @@ func ReviewFlashcard(deckID, cardID string, rating riff.Rating, reviewedCardIDs
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
dueCards, _ := getDueFlashcards(deckID, reviewedCardIDs)
|
dueCards, _, _, _ := getDueFlashcards(deckID, reviewedCardIDs)
|
||||||
if 1 > len(dueCards) {
|
if 1 > len(dueCards) {
|
||||||
// 该卡包中没有待复习的卡片了,说明最后一张卡片已经复习完了,清空撤销缓存和跳过缓存
|
// 该卡包中没有待复习的卡片了,说明最后一张卡片已经复习完了,清空撤销缓存和跳过缓存
|
||||||
reviewCardCache = map[string]riff.Card{}
|
reviewCardCache = map[string]riff.Card{}
|
||||||
@ -453,7 +453,7 @@ func newFlashcard(card riff.Card, blockID, deckID string, now time.Time) *Flashc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetNotebookDueFlashcards(boxID string, reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount int, err error) {
|
func GetNotebookDueFlashcards(boxID string, reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount, unreviewedNewCardCount, unreviewedOldCardCount int, err error) {
|
||||||
deckLock.Lock()
|
deckLock.Lock()
|
||||||
defer deckLock.Unlock()
|
defer deckLock.Unlock()
|
||||||
|
|
||||||
@ -491,7 +491,7 @@ func GetNotebookDueFlashcards(boxID string, reviewedCardIDs []string) (ret []*Fl
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit)
|
cards, unreviewedCnt, unreviewedNewCardCnt, unreviewedOldCardCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit)
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
for _, card := range cards {
|
for _, card := range cards {
|
||||||
ret = append(ret, newFlashcard(card, card.BlockID(), builtinDeckID, now))
|
ret = append(ret, newFlashcard(card, card.BlockID(), builtinDeckID, now))
|
||||||
@ -500,10 +500,12 @@ func GetNotebookDueFlashcards(boxID string, reviewedCardIDs []string) (ret []*Fl
|
|||||||
ret = []*Flashcard{}
|
ret = []*Flashcard{}
|
||||||
}
|
}
|
||||||
unreviewedCount = unreviewedCnt
|
unreviewedCount = unreviewedCnt
|
||||||
|
unreviewedNewCardCount = unreviewedNewCardCnt
|
||||||
|
unreviewedOldCardCount = unreviewedOldCardCnt
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetTreeDueFlashcards(rootID string, reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount int, err error) {
|
func GetTreeDueFlashcards(rootID string, reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount, unreviewedNewCardCount, unreviewedOldCardCount int, err error) {
|
||||||
deckLock.Lock()
|
deckLock.Lock()
|
||||||
defer deckLock.Unlock()
|
defer deckLock.Unlock()
|
||||||
|
|
||||||
@ -534,7 +536,7 @@ func GetTreeDueFlashcards(rootID string, reviewedCardIDs []string) (ret []*Flash
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs, newCardLimit, reviewCardLimit)
|
cards, unreviewedCnt, unreviewedNewCardCnt, unreviewedOldCardCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs, newCardLimit, reviewCardLimit)
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
for _, card := range cards {
|
for _, card := range cards {
|
||||||
ret = append(ret, newFlashcard(card, card.BlockID(), builtinDeckID, now))
|
ret = append(ret, newFlashcard(card, card.BlockID(), builtinDeckID, now))
|
||||||
@ -543,6 +545,8 @@ func GetTreeDueFlashcards(rootID string, reviewedCardIDs []string) (ret []*Flash
|
|||||||
ret = []*Flashcard{}
|
ret = []*Flashcard{}
|
||||||
}
|
}
|
||||||
unreviewedCount = unreviewedCnt
|
unreviewedCount = unreviewedCnt
|
||||||
|
unreviewedNewCardCount = unreviewedNewCardCnt
|
||||||
|
unreviewedOldCardCount = unreviewedOldCardCnt
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -581,29 +585,29 @@ func getBoxBlocks(boxID string) (blockIDsMap map[string]bool, blockIDs []string)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetDueFlashcards(deckID string, reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount int, err error) {
|
func GetDueFlashcards(deckID string, reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount, unreviewedNewCardCount, unreviewedOldCardCount int, err error) {
|
||||||
deckLock.Lock()
|
deckLock.Lock()
|
||||||
defer deckLock.Unlock()
|
defer deckLock.Unlock()
|
||||||
|
|
||||||
waitForSyncingStorages()
|
waitForSyncingStorages()
|
||||||
|
|
||||||
if "" == deckID {
|
if "" == deckID {
|
||||||
ret, unreviewedCount = getAllDueFlashcards(reviewedCardIDs)
|
ret, unreviewedCount, unreviewedNewCardCount, unreviewedOldCardCount = getAllDueFlashcards(reviewedCardIDs)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ret, unreviewedCount = getDueFlashcards(deckID, reviewedCardIDs)
|
ret, unreviewedCount, unreviewedNewCardCount, unreviewedOldCardCount = getDueFlashcards(deckID, reviewedCardIDs)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDueFlashcards(deckID string, reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount int) {
|
func getDueFlashcards(deckID string, reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount, unreviewedNewCardCount, unreviewedOldCardCount int) {
|
||||||
deck := Decks[deckID]
|
deck := Decks[deckID]
|
||||||
if nil == deck {
|
if nil == deck {
|
||||||
logging.LogWarnf("deck not found [%s]", deckID)
|
logging.LogWarnf("deck not found [%s]", deckID)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, nil, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit)
|
cards, unreviewedCnt, unreviewedNewCardCnt, unreviewedOldCardCnt := getDeckDueCards(deck, reviewedCardIDs, nil, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit)
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
for _, card := range cards {
|
for _, card := range cards {
|
||||||
ret = append(ret, newFlashcard(card, card.BlockID(), deckID, now))
|
ret = append(ret, newFlashcard(card, card.BlockID(), deckID, now))
|
||||||
@ -612,14 +616,18 @@ func getDueFlashcards(deckID string, reviewedCardIDs []string) (ret []*Flashcard
|
|||||||
ret = []*Flashcard{}
|
ret = []*Flashcard{}
|
||||||
}
|
}
|
||||||
unreviewedCount = unreviewedCnt
|
unreviewedCount = unreviewedCnt
|
||||||
|
unreviewedNewCardCount = unreviewedNewCardCnt
|
||||||
|
unreviewedOldCardCount = unreviewedOldCardCnt
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAllDueFlashcards(reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount int) {
|
func getAllDueFlashcards(reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount, unreviewedNewCardCount, unreviewedOldCardCount int) {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
for _, deck := range Decks {
|
for _, deck := range Decks {
|
||||||
cards, unreviewedCnt := getDeckDueCards(deck, reviewedCardIDs, nil, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit)
|
cards, unreviewedCnt, unreviewedNewCardCnt, unreviewedOldCardCnt := getDeckDueCards(deck, reviewedCardIDs, nil, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit)
|
||||||
unreviewedCount += unreviewedCnt
|
unreviewedCount += unreviewedCnt
|
||||||
|
unreviewedNewCardCnt += unreviewedNewCardCnt
|
||||||
|
unreviewedOldCardCnt += unreviewedOldCardCnt
|
||||||
for _, card := range cards {
|
for _, card := range cards {
|
||||||
ret = append(ret, newFlashcard(card, card.BlockID(), deck.ID, now))
|
ret = append(ret, newFlashcard(card, card.BlockID(), deck.ID, now))
|
||||||
}
|
}
|
||||||
@ -981,7 +989,7 @@ func getDeckIDs() (deckIDs []string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDeckDueCards(deck *riff.Deck, reviewedCardIDs, blockIDs []string, newCardLimit, reviewCardLimit int) (ret []riff.Card, unreviewedCount int) {
|
func getDeckDueCards(deck *riff.Deck, reviewedCardIDs, blockIDs []string, newCardLimit, reviewCardLimit int) (ret []riff.Card, unreviewedCount, unreviewedNewCardCount, unreviewedOldCardCount int) {
|
||||||
ret = []riff.Card{}
|
ret = []riff.Card{}
|
||||||
dues := deck.Dues()
|
dues := deck.Dues()
|
||||||
|
|
||||||
@ -1004,9 +1012,19 @@ func getDeckDueCards(deck *riff.Deck, reviewedCardIDs, blockIDs []string, newCar
|
|||||||
if 0 < len(reviewedCardIDs) {
|
if 0 < len(reviewedCardIDs) {
|
||||||
if !gulu.Str.Contains(c.ID(), reviewedCardIDs) {
|
if !gulu.Str.Contains(c.ID(), reviewedCardIDs) {
|
||||||
unreviewedCount++
|
unreviewedCount++
|
||||||
|
if riff.New == c.GetState() {
|
||||||
|
unreviewedNewCardCount++
|
||||||
|
} else {
|
||||||
|
unreviewedOldCardCount++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
unreviewedCount++
|
unreviewedCount++
|
||||||
|
if riff.New == c.GetState() {
|
||||||
|
unreviewedNewCardCount++
|
||||||
|
} else {
|
||||||
|
unreviewedOldCardCount++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dues = tmp
|
dues = tmp
|
||||||
|
Loading…
Reference in New Issue
Block a user