From 48c354e7de130aaada9d7120125bbc768344fd3b Mon Sep 17 00:00:00 2001 From: debbbbie Date: Fri, 10 Nov 2023 20:21:56 +0800 Subject: [PATCH] Show card NextDue to the flashcard management UI (#9621) * Show RiffCard NextDue to the UI * Show RiffCard NextDue to the UI * Show card NextDue to the flashcard management UI --- app/appearance/langs/en_US.json | 1 + app/appearance/langs/es_ES.json | 1 + app/appearance/langs/fr_FR.json | 1 + app/appearance/langs/zh_CHT.json | 1 + app/appearance/langs/zh_CN.json | 1 + app/src/card/viewCards.ts | 4 +++- app/src/types/index.d.ts | 7 ++++++- kernel/model/block.go | 17 +++++++++++++++-- kernel/model/flashcard.go | 2 +- 9 files changed, 30 insertions(+), 5 deletions(-) diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index ae8440d73..258cb7267 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -175,6 +175,7 @@ "searchTip5": "to dismiss", "showRecentUpdatedBlocks": "The most recently updated blocks will be shown when the input is empty", "revisionCount": "Number of revisions", + "nextDue": "Next Due", "flashcardNewCardLimit": "New Card Limit", "flashcardNewCardLimitTip": "If there are many new cards, you can set the number of new cards to review through this item", "flashcardReviewCardLimit": "Review Card Limit", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index 448138a0b..7839bc5ca 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -175,6 +175,7 @@ "searchTip5": "para descartar", "showRecentUpdatedBlocks": "Los bloques actualizados más recientemente se mostrarán cuando la entrada esté vacía", "revisionCount": "Número de revisiones", + "nextDue": "Revisa la próxima vez", "flashcardNewCardLimit": "Límite de tarjeta nueva", "flashcardNewCardLimitTip": "Si hay muchas tarjetas nuevas, puede establecer la cantidad de tarjetas nuevas para revisar a través de este elemento", "flashcardReviewCardLimit": "Revisar límite de tarjeta", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index acdc4fd1f..868526c35 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -175,6 +175,7 @@ "searchTip5": "pour ignorer", "showRecentUpdatedBlocks": "Les blocs les plus récemment mis à jour seront affichés lorsque l'entrée est vide", "revisionCount": "Nombre de révisions", + "nextDue": "Revoir la prochaine fois", "flashcardNewCardLimit": "Nouvelle limite de carte", "flashcardNewCardLimitTip": "S'il y a beaucoup de nouvelles cartes, vous pouvez définir le nombre de nouvelles cartes à examiner via cet élément", "flashcardReviewCardLimit": "Revoir la limite de la carte", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 84c31c15e..d897a7936 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -175,6 +175,7 @@ "searchTip5": "退出搜索", "showRecentUpdatedBlocks": "輸入為空時將顯示最近更新的塊", "revisionCount": "複習次數", + "nextDue": "下次複習", "flashcardNewCardLimit": "新卡上限", "flashcardNewCardLimitTip": "如果新卡較多,可以通過該項設置新卡複習的數量", "flashcardReviewCardLimit": "復習卡上限", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index e6e8b9168..008e14a12 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -175,6 +175,7 @@ "searchTip5": "退出搜索", "showRecentUpdatedBlocks": "输入为空时将显示最近更新的块", "revisionCount": "复习次数", + "nextDue": "下次复习", "flashcardNewCardLimit": "新卡上限", "flashcardNewCardLimitTip": "如果新卡较多,可以通过该项设置新卡复习的数量", "flashcardReviewCardLimit": "复习卡上限", diff --git a/app/src/card/viewCards.ts b/app/src/card/viewCards.ts index 89b708c3d..60d2ca14a 100644 --- a/app/src/card/viewCards.ts +++ b/app/src/card/viewCards.ts @@ -1,3 +1,4 @@ +import * as dayjs from "dayjs"; import {Protyle} from "../protyle"; import {fetchPost} from "../util/fetch"; import {Dialog} from "../dialog"; @@ -217,7 +218,8 @@ ${unicode2Emoji(item.ial.icon, "b3-list-item__graphic", true)} ${escapeHtml(hPath)} -${item.riffCardReps} +${dayjs(item.riffCard?.due).format("YYYY-MM-DD")} +${item.riffCard?.reps} `; isFirst = false; } else { diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index 228e2c63e..62d8f31bf 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -903,7 +903,7 @@ interface IBlockTree { } interface IBlock { - riffCardReps?: number // 闪卡复习次数 + riffCard?: IRiffCard, depth?: number, box?: string; path?: string; @@ -925,6 +925,11 @@ interface IBlock { ial: IObject } +interface IRiffCard { + due?: string; + reps?: number; // 闪卡复习次数 +} + interface IModels { editor: import("../editor").Editor [], graph: import("../layout/dock/Graph").Graph[], diff --git a/kernel/model/block.go b/kernel/model/block.go index fa2000d03..f735b153e 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -24,6 +24,7 @@ import ( "github.com/88250/lute/ast" "github.com/88250/lute/parse" + "github.com/open-spaced-repetition/go-fsrs" "github.com/siyuan-note/siyuan/kernel/sql" "github.com/siyuan-note/siyuan/kernel/treenode" "github.com/siyuan-note/siyuan/kernel/util" @@ -60,8 +61,20 @@ type Block struct { Created string `json:"created"` Updated string `json:"updated"` - RiffCardID string `json:"riffCardID"` - RiffCardReps uint64 `json:"riffCardReps"` + RiffCardID string `json:"riffCardID"` + RiffCard *RiffCard `json:"riffCard"` +} + +type RiffCard struct { + Due time.Time `json:"due"` + Reps uint64 `json:"reps"` +} + +func GetRiffCard(card *fsrs.Card) *RiffCard { + return &RiffCard{ + Due: card.Due, + Reps: card.Reps, + } } func (block *Block) IsContainerBlock() bool { diff --git a/kernel/model/flashcard.go b/kernel/model/flashcard.go index d3ad409dd..5f9ca4a16 100644 --- a/kernel/model/flashcard.go +++ b/kernel/model/flashcard.go @@ -260,7 +260,7 @@ func getCardsBlocks(cards []riff.Card, page int) (blocks []*Block, total, pageCo } b.RiffCardID = cards[i].ID() - b.RiffCardReps = cards[i].(*riff.FSRSCard).C.Reps + b.RiffCard = GetRiffCard(cards[i].(*riff.FSRSCard).C) } return }