From 883c08810efc1e421eef9ea8af9a61b518d49a0d Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 8 May 2023 22:17:52 +0800 Subject: [PATCH] :art: Show count in spaced repetition tree filter floating window https://github.com/siyuan-note/siyuan/issues/8202 --- kernel/model/box.go | 1 + kernel/model/file.go | 68 +++++++++++++++++++++------------------ kernel/model/flashcard.go | 26 +++++++-------- 3 files changed, 48 insertions(+), 47 deletions(-) diff --git a/kernel/model/box.go b/kernel/model/box.go index fcfd0e38b..64e43b883 100644 --- a/kernel/model/box.go +++ b/kernel/model/box.go @@ -55,6 +55,7 @@ type Box struct { NewFlashcardCount int `json:"newFlashcardCount"` DueFlashcardCount int `json:"dueFlashcardCount"` + FlashcardCount int `json:"flashcardCount"` historyGenerated int64 // 最近一次历史生成时间 } diff --git a/kernel/model/file.go b/kernel/model/file.go index 35701f4d2..b27d7304a 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -48,25 +48,27 @@ import ( ) type File struct { - Path string `json:"path"` - Name string `json:"name"` // 标题,即 ial["title"] - Icon string `json:"icon"` - Name1 string `json:"name1"` // 命名,即 ial["name"] - Alias string `json:"alias"` - Memo string `json:"memo"` - Bookmark string `json:"bookmark"` - ID string `json:"id"` - Count int `json:"count"` - Size uint64 `json:"size"` - HSize string `json:"hSize"` - Mtime int64 `json:"mtime"` - CTime int64 `json:"ctime"` - HMtime string `json:"hMtime"` - HCtime string `json:"hCtime"` - Sort int `json:"sort"` - SubFileCount int `json:"subFileCount"` - NewFlashcardCount int `json:"newFlashcardCount"` - DueFlashcardCount int `json:"dueFlashcardCount"` + Path string `json:"path"` + Name string `json:"name"` // 标题,即 ial["title"] + Icon string `json:"icon"` + Name1 string `json:"name1"` // 命名,即 ial["name"] + Alias string `json:"alias"` + Memo string `json:"memo"` + Bookmark string `json:"bookmark"` + ID string `json:"id"` + Count int `json:"count"` + Size uint64 `json:"size"` + HSize string `json:"hSize"` + Mtime int64 `json:"mtime"` + CTime int64 `json:"ctime"` + HMtime string `json:"hMtime"` + HCtime string `json:"hCtime"` + Sort int `json:"sort"` + SubFileCount int `json:"subFileCount"` + + NewFlashcardCount int `json:"newFlashcardCount"` + DueFlashcardCount int `json:"dueFlashcardCount"` + FlashcardCount int `json:"flashcardCount"` } func (box *Box) docFromFileInfo(fileInfo *FileInfo, ial map[string]string) (ret *File) { @@ -164,9 +166,9 @@ func SearchDocsByKeyword(keyword string, flashcard bool) (ret []map[string]strin for _, box := range boxes { if strings.Contains(box.Name, keyword) { if flashcard { - newFlashcardCount, dueFlashcardCount, containFlashcard := countBoxFlashcard(box.ID) - if containFlashcard { - ret = append(ret, map[string]string{"path": "/", "hPath": box.Name + "/", "box": box.ID, "boxIcon": box.Icon, "newFlashcardCount": strconv.Itoa(newFlashcardCount), "dueFlashcardCount": strconv.Itoa(dueFlashcardCount)}) + newFlashcardCount, dueFlashcardCount, flashcardCount := countBoxFlashcard(box.ID) + if 0 < flashcardCount { + ret = append(ret, map[string]string{"path": "/", "hPath": box.Name + "/", "box": box.ID, "boxIcon": box.Icon, "newFlashcardCount": strconv.Itoa(newFlashcardCount), "dueFlashcardCount": strconv.Itoa(dueFlashcardCount), "flashcardCount": strconv.Itoa(flashcardCount)}) } } else { ret = append(ret, map[string]string{"path": "/", "hPath": box.Name + "/", "box": box.ID, "boxIcon": box.Icon}) @@ -185,9 +187,9 @@ func SearchDocsByKeyword(keyword string, flashcard bool) (ret []map[string]strin } else { for _, box := range boxes { if flashcard { - newFlashcardCount, dueFlashcardCount, containFlashcard := countBoxFlashcard(box.ID) - if containFlashcard { - ret = append(ret, map[string]string{"path": "/", "hPath": box.Name + "/", "box": box.ID, "boxIcon": box.Icon, "newFlashcardCount": strconv.Itoa(newFlashcardCount), "dueFlashcardCount": strconv.Itoa(dueFlashcardCount)}) + newFlashcardCount, dueFlashcardCount, flashcardCount := countBoxFlashcard(box.ID) + if 0 < flashcardCount { + ret = append(ret, map[string]string{"path": "/", "hPath": box.Name + "/", "box": box.ID, "boxIcon": box.Icon, "newFlashcardCount": strconv.Itoa(newFlashcardCount), "dueFlashcardCount": strconv.Itoa(dueFlashcardCount), "flashcardCount": strconv.Itoa(flashcardCount)}) } } else { ret = append(ret, map[string]string{"path": "/", "hPath": box.Name + "/", "box": box.ID, "boxIcon": box.Icon}) @@ -202,9 +204,9 @@ func SearchDocsByKeyword(keyword string, flashcard bool) (ret []map[string]strin } hPath := b.Name + rootBlock.HPath if flashcard { - newFlashcardCount, dueFlashcardCount, containFlashcard := countTreeFlashcard(rootBlock.ID) - if containFlashcard { - ret = append(ret, map[string]string{"path": rootBlock.Path, "hPath": hPath, "box": rootBlock.Box, "boxIcon": b.Icon, "newFlashcardCount": strconv.Itoa(newFlashcardCount), "dueFlashcardCount": strconv.Itoa(dueFlashcardCount)}) + newFlashcardCount, dueFlashcardCount, flashcardCount := countTreeFlashcard(rootBlock.ID) + if 0 < flashcardCount { + ret = append(ret, map[string]string{"path": rootBlock.Path, "hPath": hPath, "box": rootBlock.Box, "boxIcon": b.Icon, "newFlashcardCount": strconv.Itoa(newFlashcardCount), "dueFlashcardCount": strconv.Itoa(dueFlashcardCount), "flashcardCount": strconv.Itoa(flashcardCount)}) } } else { ret = append(ret, map[string]string{"path": rootBlock.Path, "hPath": hPath, "box": rootBlock.Box, "boxIcon": b.Icon}) @@ -291,10 +293,11 @@ func ListDocTree(boxID, path string, sortMode int, flashcard bool, maxListCount if flashcard { rootID := strings.TrimSuffix(filepath.Base(parentDocPath), ".sy") - newFlashcardCount, dueFlashcardCount, containFlashcard := countTreeFlashcard(rootID) - if containFlashcard { + newFlashcardCount, dueFlashcardCount, flashcardCount := countTreeFlashcard(rootID) + if 0 < flashcardCount { doc.NewFlashcardCount = newFlashcardCount doc.DueFlashcardCount = dueFlashcardCount + doc.FlashcardCount = flashcardCount docs = append(docs, doc) } } else { @@ -314,10 +317,11 @@ func ListDocTree(boxID, path string, sortMode int, flashcard bool, maxListCount if flashcard { rootID := strings.TrimSuffix(filepath.Base(file.path), ".sy") - newFlashcardCount, dueFlashcardCount, containFlashcard := countTreeFlashcard(rootID) - if containFlashcard { + newFlashcardCount, dueFlashcardCount, flashcardCount := countTreeFlashcard(rootID) + if 0 < flashcardCount { doc.NewFlashcardCount = newFlashcardCount doc.DueFlashcardCount = dueFlashcardCount + doc.FlashcardCount = flashcardCount docs = append(docs, doc) } } else { diff --git a/kernel/model/flashcard.go b/kernel/model/flashcard.go index 4f0d2f38b..74c269ca0 100644 --- a/kernel/model/flashcard.go +++ b/kernel/model/flashcard.go @@ -45,17 +45,18 @@ func GetFlashcardNotebooks() (ret []*Box) { boxes := Conf.GetOpenedBoxes() for _, box := range boxes { - newFlashcardCount, dueFlashcardCount, containFlashcard := countBoxFlashcard(box.ID) - if containFlashcard { + newFlashcardCount, dueFlashcardCount, flashcardCount := countBoxFlashcard(box.ID) + if 0 < flashcardCount { box.NewFlashcardCount = newFlashcardCount box.DueFlashcardCount = dueFlashcardCount + box.FlashcardCount = flashcardCount ret = append(ret, box) } } return } -func countTreeFlashcard(rootID string) (newFlashcardCount, dueFlashcardCount int, containFlashcard bool) { +func countTreeFlashcard(rootID string) (newFlashcardCount, dueFlashcardCount, flashcardCount int) { deck := Decks[builtinDeckID] if nil == deck { return @@ -63,14 +64,12 @@ func countTreeFlashcard(rootID string) (newFlashcardCount, dueFlashcardCount int deckBlockIDs := deck.GetBlockIDs() blockIDs := getTreeSubTreeChildBlocks(rootID) - containFlashcard = false for _, blockID := range deckBlockIDs { if gulu.Str.Contains(blockID, blockIDs) { - containFlashcard = true - break + flashcardCount++ } } - if !containFlashcard { + if 1 > flashcardCount { return } @@ -81,7 +80,7 @@ func countTreeFlashcard(rootID string) (newFlashcardCount, dueFlashcardCount int return } -func countBoxFlashcard(boxID string) (newFlashcardCount, dueFlashcardCount int, containFlashcard bool) { +func countBoxFlashcard(boxID string) (newFlashcardCount, dueFlashcardCount, flashcardCount int) { deck := Decks[builtinDeckID] if nil == deck { return @@ -93,7 +92,6 @@ func countBoxFlashcard(boxID string) (newFlashcardCount, dueFlashcardCount int, return } - containFlashcard = false for _, entry := range entries { if entry.IsDir() { continue @@ -104,12 +102,10 @@ func countBoxFlashcard(boxID string) (newFlashcardCount, dueFlashcardCount int, } rootID := strings.TrimSuffix(entry.Name(), ".sy") - treeNewFlashcardCount, treeDueFlashcardCount, treeContainFlashcard := countTreeFlashcard(rootID) - if treeContainFlashcard { - containFlashcard = true - newFlashcardCount += treeNewFlashcardCount - dueFlashcardCount += treeDueFlashcardCount - } + treeNewFlashcardCount, treeDueFlashcardCount, treeFlashcardCount := countTreeFlashcard(rootID) + flashcardCount += treeFlashcardCount + newFlashcardCount += treeNewFlashcardCount + dueFlashcardCount += treeDueFlashcardCount } return }