🎨 Show count in spaced repetition tree filter floating window https://github.com/siyuan-note/siyuan/issues/8202

This commit is contained in:
Liang Ding 2023-05-09 10:19:13 +08:00
parent ba5449a0b4
commit 2678dfc827
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
2 changed files with 34 additions and 18 deletions

View file

@ -76,27 +76,20 @@ func countTreeFlashcard(rootID string, deck *riff.Deck, deckBlockIDs []string) (
}
func countBoxFlashcard(boxID string, deck *riff.Deck, deckBlockIDs []string) (newFlashcardCount, dueFlashcardCount, flashcardCount int) {
entries, err := os.ReadDir(filepath.Join(util.DataDir, boxID))
if nil != err {
logging.LogErrorf("read dir failed: %s", err)
blockIDs := getBoxBlocks(boxID)
for _, blockID := range deckBlockIDs {
if gulu.Str.Contains(blockID, blockIDs) {
flashcardCount++
}
}
if 1 > flashcardCount {
return
}
for _, entry := range entries {
if entry.IsDir() {
continue
}
if !strings.HasSuffix(entry.Name(), ".sy") {
continue
}
rootID := strings.TrimSuffix(entry.Name(), ".sy")
treeNewFlashcardCount, treeDueFlashcardCount, treeFlashcardCount := countTreeFlashcard(rootID, deck, deckBlockIDs)
flashcardCount += treeFlashcardCount
newFlashcardCount += treeNewFlashcardCount
dueFlashcardCount += treeDueFlashcardCount
}
newFlashCards := deck.GetNewCardsByBlockIDs(blockIDs)
newFlashcardCount = len(newFlashCards)
newDueFlashcards := deck.GetDueCardsByBlockIDs(blockIDs)
dueFlashcardCount = len(newDueFlashcards)
return
}
@ -421,6 +414,14 @@ func getTreeSubTreeChildBlocks(rootID string) (treeBlockIDs []string) {
return
}
func getBoxBlocks(boxID string) (blockIDs []string) {
bts := treenode.GetBlockTreesByBoxID(boxID)
for _, bt := range bts {
blockIDs = append(blockIDs, bt.ID)
}
return
}
func GetDueFlashcards(deckID string, reviewedCardIDs []string) (ret []*Flashcard, unreviewedCount int, err error) {
deckLock.Lock()
defer deckLock.Unlock()

View file

@ -255,6 +255,21 @@ func RemoveBlockTreesByPathPrefix(pathPrefix string) {
}
}
func GetBlockTreesByBoxID(boxID string) (ret []*BlockTree) {
blockTrees.Range(func(key, value interface{}) bool {
slice := value.(*btSlice)
slice.m.Lock()
for _, b := range slice.data {
if b.BoxID == boxID {
ret = append(ret, b)
}
}
slice.m.Unlock()
return true
})
return
}
func RemoveBlockTreesByBoxID(boxID string) (ids []string) {
blockTrees.Range(func(key, value interface{}) bool {
slice := value.(*btSlice)