Browse Source

:art: Try fill flashcard to db tpl https://github.com/siyuan-note/siyuan/issues/10502#issuecomment-1986703280

Daniel 1 year ago
parent
commit
16fd52a74d
2 changed files with 48 additions and 10 deletions
  1. 42 4
      kernel/model/attribute_view.go
  2. 6 6
      kernel/model/flashcard.go

+ 42 - 4
kernel/model/attribute_view.go

@@ -433,7 +433,22 @@ func GetBlockAttributeViewKeys(blockID string) (ret []*BlockAttributeViewKeys) {
 				}
 				}
 			}
 			}
 		}
 		}
+
 		// 再处理模板列
 		// 再处理模板列
+		// 获取闪卡信息
+		// TODO 目前看来使用场景不多,暂时不实现了 https://github.com/siyuan-note/siyuan/issues/10502#issuecomment-1986703280
+		var flashcard *Flashcard
+		//deck := Decks[builtinDeckID]
+		//if nil != deck {
+		//	blockIDs := []string{blockID}
+		//	cards := deck.GetCardsByBlockIDs(blockIDs)
+		//	now := time.Now()
+		//	if 0 < len(cards) {
+		//		flashcard = newFlashcard(cards[0], builtinDeckID, now)
+		//	}
+		//}
+
+		// 渲染模板
 		for _, kv := range keyValues {
 		for _, kv := range keyValues {
 			switch kv.Key.Type {
 			switch kv.Key.Type {
 			case av.KeyTypeTemplate:
 			case av.KeyTypeTemplate:
@@ -441,9 +456,10 @@ func GetBlockAttributeViewKeys(blockID string) (ret []*BlockAttributeViewKeys) {
 					ial := map[string]string{}
 					ial := map[string]string{}
 					block := getRowBlockValue(keyValues)
 					block := getRowBlockValue(keyValues)
 					if nil != block && !block.IsDetached {
 					if nil != block && !block.IsDetached {
-						ial = GetBlockAttrsWithoutWaitWriting(blockID)
+						ial = GetBlockAttrsWithoutWaitWriting(block.ID)
 					}
 					}
-					kv.Values[0].Template.Content = renderTemplateCol(ial, kv.Key.Template, keyValues)
+
+					kv.Values[0].Template.Content = renderTemplateCol(ial, flashcard, keyValues, kv.Key.Template)
 				}
 				}
 			}
 			}
 		}
 		}
@@ -798,7 +814,7 @@ func renderAttributeView(attrView *av.AttributeView, viewID string, page, pageSi
 	return
 	return
 }
 }
 
 
-func renderTemplateCol(ial map[string]string, tplContent string, rowValues []*av.KeyValues) string {
+func renderTemplateCol(ial map[string]string, flashcard *Flashcard, rowValues []*av.KeyValues, tplContent string) string {
 	if "" == ial["id"] {
 	if "" == ial["id"] {
 		block := getRowBlockValue(rowValues)
 		block := getRowBlockValue(rowValues)
 		if nil != block && nil != block.Block {
 		if nil != block && nil != block.Block {
@@ -847,6 +863,11 @@ func renderTemplateCol(ial map[string]string, tplContent string, rowValues []*av
 			dataModel["updated"] = time.Now()
 			dataModel["updated"] = time.Now()
 		}
 		}
 	}
 	}
+
+	if nil != flashcard {
+		dataModel["flashcard"] = flashcard
+	}
+
 	for _, rowValue := range rowValues {
 	for _, rowValue := range rowValues {
 		if 0 < len(rowValue.Values) {
 		if 0 < len(rowValue.Values) {
 			v := rowValue.Values[0]
 			v := rowValue.Values[0]
@@ -859,6 +880,7 @@ func renderTemplateCol(ial map[string]string, tplContent string, rowValues []*av
 			}
 			}
 		}
 		}
 	}
 	}
+
 	if err := tpl.Execute(buf, dataModel); nil != err {
 	if err := tpl.Execute(buf, dataModel); nil != err {
 		logging.LogWarnf("execute template [%s] failed: %s", tplContent, err)
 		logging.LogWarnf("execute template [%s] failed: %s", tplContent, err)
 	}
 	}
@@ -1113,6 +1135,22 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
 
 
 	// 最后单独渲染模板列,这样模板列就可以使用汇总、关联、创建时间和更新时间列的值了
 	// 最后单独渲染模板列,这样模板列就可以使用汇总、关联、创建时间和更新时间列的值了
 	// Database table view template columns support reading relation, rollup, created and updated columns https://github.com/siyuan-note/siyuan/issues/10442
 	// Database table view template columns support reading relation, rollup, created and updated columns https://github.com/siyuan-note/siyuan/issues/10442
+
+	// 获取闪卡信息
+	flashcards := map[string]*Flashcard{}
+	deck := Decks[builtinDeckID]
+	if nil != deck {
+		var blockIDs []string
+		for _, row := range ret.Rows {
+			blockIDs = append(blockIDs, row.ID)
+		}
+		cards := deck.GetCardsByBlockIDs(blockIDs)
+		now := time.Now()
+		for _, card := range cards {
+			flashcards[card.BlockID()] = newFlashcard(card, builtinDeckID, now)
+		}
+	}
+
 	for _, row := range ret.Rows {
 	for _, row := range ret.Rows {
 		for _, cell := range row.Cells {
 		for _, cell := range row.Cells {
 			switch cell.ValueType {
 			switch cell.ValueType {
@@ -1123,7 +1161,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
 				if nil != block && !block.IsDetached {
 				if nil != block && !block.IsDetached {
 					ial = GetBlockAttrsWithoutWaitWriting(row.ID)
 					ial = GetBlockAttrsWithoutWaitWriting(row.ID)
 				}
 				}
-				content := renderTemplateCol(ial, cell.Value.Template.Content, keyValues)
+				content := renderTemplateCol(ial, flashcards[row.ID], keyValues, cell.Value.Template.Content)
 				cell.Value.Template.Content = content
 				cell.Value.Template.Content = content
 			}
 			}
 		}
 		}

+ 6 - 6
kernel/model/flashcard.go

@@ -513,7 +513,7 @@ type Flashcard struct {
 	NextDues   map[riff.Rating]string `json:"nextDues"`
 	NextDues   map[riff.Rating]string `json:"nextDues"`
 }
 }
 
 
-func newFlashcard(card riff.Card, blockID, deckID string, now time.Time) *Flashcard {
+func newFlashcard(card riff.Card, deckID string, now time.Time) *Flashcard {
 	nextDues := map[riff.Rating]string{}
 	nextDues := map[riff.Rating]string{}
 	for rating, due := range card.NextDues() {
 	for rating, due := range card.NextDues() {
 		nextDues[rating] = strings.TrimSpace(util.HumanizeDiffTime(due, now, Conf.Lang))
 		nextDues[rating] = strings.TrimSpace(util.HumanizeDiffTime(due, now, Conf.Lang))
@@ -522,7 +522,7 @@ func newFlashcard(card riff.Card, blockID, deckID string, now time.Time) *Flashc
 	return &Flashcard{
 	return &Flashcard{
 		DeckID:     deckID,
 		DeckID:     deckID,
 		CardID:     card.ID(),
 		CardID:     card.ID(),
-		BlockID:    blockID,
+		BlockID:    card.BlockID(),
 		Lapses:     card.GetLapses(),
 		Lapses:     card.GetLapses(),
 		Reps:       card.GetReps(),
 		Reps:       card.GetReps(),
 		State:      card.GetState(),
 		State:      card.GetState(),
@@ -572,7 +572,7 @@ func GetNotebookDueFlashcards(boxID string, reviewedCardIDs []string) (ret []*Fl
 	cards, unreviewedCnt, unreviewedNewCardCnt, unreviewedOldCardCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit, Conf.Flashcard.ReviewMode)
 	cards, unreviewedCnt, unreviewedNewCardCnt, unreviewedOldCardCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit, Conf.Flashcard.ReviewMode)
 	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, builtinDeckID, now))
 	}
 	}
 	if 1 > len(ret) {
 	if 1 > len(ret) {
 		ret = []*Flashcard{}
 		ret = []*Flashcard{}
@@ -617,7 +617,7 @@ func GetTreeDueFlashcards(rootID string, reviewedCardIDs []string) (ret []*Flash
 	cards, unreviewedCnt, unreviewedNewCardCnt, unreviewedOldCardCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs, newCardLimit, reviewCardLimit, Conf.Flashcard.ReviewMode)
 	cards, unreviewedCnt, unreviewedNewCardCnt, unreviewedOldCardCnt := getDeckDueCards(deck, reviewedCardIDs, treeBlockIDs, newCardLimit, reviewCardLimit, Conf.Flashcard.ReviewMode)
 	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, builtinDeckID, now))
 	}
 	}
 	if 1 > len(ret) {
 	if 1 > len(ret) {
 		ret = []*Flashcard{}
 		ret = []*Flashcard{}
@@ -688,7 +688,7 @@ func getDueFlashcards(deckID string, reviewedCardIDs []string) (ret []*Flashcard
 	cards, unreviewedCnt, unreviewedNewCardCnt, unreviewedOldCardCnt := getDeckDueCards(deck, reviewedCardIDs, nil, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit, Conf.Flashcard.ReviewMode)
 	cards, unreviewedCnt, unreviewedNewCardCnt, unreviewedOldCardCnt := getDeckDueCards(deck, reviewedCardIDs, nil, Conf.Flashcard.NewCardLimit, Conf.Flashcard.ReviewCardLimit, Conf.Flashcard.ReviewMode)
 	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, deckID, now))
 	}
 	}
 	if 1 > len(ret) {
 	if 1 > len(ret) {
 		ret = []*Flashcard{}
 		ret = []*Flashcard{}
@@ -707,7 +707,7 @@ func getAllDueFlashcards(reviewedCardIDs []string) (ret []*Flashcard, unreviewed
 		unreviewedNewCardCount += unreviewedNewCardCnt
 		unreviewedNewCardCount += unreviewedNewCardCnt
 		unreviewedOldCardCount += unreviewedOldCardCnt
 		unreviewedOldCardCount += unreviewedOldCardCnt
 		for _, card := range cards {
 		for _, card := range cards {
-			ret = append(ret, newFlashcard(card, card.BlockID(), deck.ID, now))
+			ret = append(ret, newFlashcard(card, deck.ID, now))
 		}
 		}
 	}
 	}
 	if 1 > len(ret) {
 	if 1 > len(ret) {