diff --git a/kernel/api/riff.go b/kernel/api/riff.go index 6e3553073..55d11a30d 100644 --- a/kernel/api/riff.go +++ b/kernel/api/riff.go @@ -35,10 +35,10 @@ func reviewRiffCard(c *gin.Context) { return } - deckName := arg["deck"].(string) + deckID := arg["deckID"].(string) blockID := arg["blockID"].(string) rating := int(arg["rating"].(float64)) - err := model.ReviewFlashcard(deckName, blockID, riff.Rating(rating)) + err := model.ReviewFlashcard(deckID, blockID, riff.Rating(rating)) if nil != err { ret.Code = -1 ret.Msg = err.Error() @@ -55,9 +55,9 @@ func getRiffDueCards(c *gin.Context) { return } - deckName := arg["deck"].(string) + deckID := arg["deckID"].(string) - cards, err := model.GetDueFlashcards(deckName) + cards, err := model.GetDueFlashcards(deckID) if nil != err { ret.Code = -1 ret.Msg = err.Error() @@ -76,9 +76,9 @@ func removeRiffCard(c *gin.Context) { return } - deckName := arg["deck"].(string) + deckID := arg["deckID"].(string) blockID := arg["blockID"].(string) - err := model.RemoveFlashcard(blockID, deckName) + err := model.RemoveFlashcard(blockID, deckID) if nil != err { ret.Code = -1 ret.Msg = err.Error() @@ -95,9 +95,9 @@ func addRiffCard(c *gin.Context) { return } - deckName := arg["deck"].(string) + deckID := arg["deckID"].(string) blockID := arg["blockID"].(string) - err := model.AddFlashcard(blockID, deckName) + err := model.AddFlashcard(blockID, deckID) if nil != err { ret.Code = -1 ret.Msg = err.Error() diff --git a/kernel/go.mod b/kernel/go.mod index c9aa51638..3080361fa 100644 --- a/kernel/go.mod +++ b/kernel/go.mod @@ -45,7 +45,7 @@ require ( github.com/siyuan-note/filelock v0.0.0-20221117095924-e1947438a35e github.com/siyuan-note/httpclient v0.0.0-20221213030227-fa8d21fd9cf8 github.com/siyuan-note/logging v0.0.0-20221031125421-9b7234d79d8a - github.com/siyuan-note/riff v0.0.0-20221221075652-94b5ba658f10 + github.com/siyuan-note/riff v0.0.0-20221221131148-653b342c7b6c github.com/steambap/captcha v1.4.1 github.com/studio-b12/gowebdav v0.0.0-20221109171924-60ec5ad56012 github.com/vmihailenco/msgpack/v5 v5.3.5 diff --git a/kernel/go.sum b/kernel/go.sum index e74e073cd..f189599c7 100644 --- a/kernel/go.sum +++ b/kernel/go.sum @@ -385,8 +385,8 @@ github.com/siyuan-note/httpclient v0.0.0-20221213030227-fa8d21fd9cf8 h1:cv0U38yu github.com/siyuan-note/httpclient v0.0.0-20221213030227-fa8d21fd9cf8/go.mod h1:aLj3LQVz2iuA3AUfkqk1UvPhqafRpthAVtjV1+ZAq+U= github.com/siyuan-note/logging v0.0.0-20221031125421-9b7234d79d8a h1:b9VJCE8IccYjsadwNBI11he+Wn25hI9lCma4uYoIYEM= github.com/siyuan-note/logging v0.0.0-20221031125421-9b7234d79d8a/go.mod h1:t1zRGxK13L/9ZFoGyTD39IbFCbee3CsypDj4b5dt4qM= -github.com/siyuan-note/riff v0.0.0-20221221075652-94b5ba658f10 h1:/7utWz6828wtcX2BjR6pu9pYEo6ThmKm1fXvAXLwPng= -github.com/siyuan-note/riff v0.0.0-20221221075652-94b5ba658f10/go.mod h1:A3G3qOTyGVOu17ui9Qg9DNkAWOgwVMxHDzHYG8sQxHc= +github.com/siyuan-note/riff v0.0.0-20221221131148-653b342c7b6c h1:DaPdLs6t6JHbedko5+w+gfNuqXgThHWkLHrKiiHrbpQ= +github.com/siyuan-note/riff v0.0.0-20221221131148-653b342c7b6c/go.mod h1:A3G3qOTyGVOu17ui9Qg9DNkAWOgwVMxHDzHYG8sQxHc= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.7 h1:I6tZjLXD2Q1kjvNbIzB1wvQBsXmKXiVrhpRE8ZjP5jY= diff --git a/kernel/model/flashcard.go b/kernel/model/flashcard.go index 177642f5b..add8f3b8e 100644 --- a/kernel/model/flashcard.go +++ b/kernel/model/flashcard.go @@ -32,15 +32,15 @@ import ( var Decks = map[string]*riff.Deck{} var deckLock = sync.Mutex{} -func ReviewFlashcard(deckName string, blockID string, rating riff.Rating) (err error) { +func ReviewFlashcard(deckID string, blockID string, rating riff.Rating) (err error) { deckLock.Lock() - deck := Decks[deckName] + deck := Decks[deckID] deckLock.Unlock() deck.Review(blockID, rating) err = deck.Save() if nil != err { - logging.LogErrorf("save deck [%s] failed: %s", deckName, err) + logging.LogErrorf("save deck [%s] failed: %s", deckID, err) return } return @@ -51,9 +51,9 @@ type Flashcard struct { BlockID string } -func GetDueFlashcards(deckName string) (ret []*Flashcard, err error) { +func GetDueFlashcards(deckID string) (ret []*Flashcard, err error) { deckLock.Lock() - deck := Decks[deckName] + deck := Decks[deckID] deckLock.Unlock() cards := deck.Dues() @@ -71,30 +71,30 @@ func GetDueFlashcards(deckName string) (ret []*Flashcard, err error) { return } -func RemoveFlashcard(blockID string, deckName string) (err error) { +func RemoveFlashcard(blockID string, deckID string) (err error) { deckLock.Lock() - deck := Decks[deckName] + deck := Decks[deckID] deckLock.Unlock() deck.RemoveCard(blockID) err = deck.Save() if nil != err { - logging.LogErrorf("save deck [%s] failed: %s", deckName, err) + logging.LogErrorf("save deck [%s] failed: %s", deckID, err) return } return } -func AddFlashcard(blockID string, deckName string) (err error) { +func AddFlashcard(blockID string, deckID string) (err error) { deckLock.Lock() - deck := Decks[deckName] + deck := Decks[deckID] deckLock.Unlock() cardID := ast.NewNodeID() deck.AddCard(cardID, blockID) err = deck.Save() if nil != err { - logging.LogErrorf("save deck [%s] failed: %s", deckName, err) + logging.LogErrorf("save deck [%s] failed: %s", deckID, err) return } return @@ -113,18 +113,16 @@ func InitFlashcards() { } for _, entry := range entries { name := entry.Name() - if strings.HasSuffix(name, "-deck.msgpack") { - name = name[:len(name)-len("-deck.msgpack")] - deckName := strings.Split(name, "-")[0] - algo := strings.Split(name, "-")[1] - deck, loadErr := riff.LoadDeck(riffSavePath, deckName, riff.Algo(algo)) + if strings.HasSuffix(name, ".deck") { + deckID := strings.TrimSuffix(name, ".deck") + deck, loadErr := riff.LoadDeck(riffSavePath, deckID) if nil != loadErr { logging.LogErrorf("load deck [%s] failed: %s", name, loadErr) continue } deckLock.Lock() - Decks[deckName] = deck + Decks[deckID] = deck deckLock.Unlock() } } @@ -132,37 +130,29 @@ func InitFlashcards() { func CreateDeck(name string) (err error) { riffSavePath := getRiffDir() - deck, err := riff.LoadDeck(riffSavePath, name, riff.AlgoFSRS) + deckID := ast.NewNodeID() + deck, err := riff.LoadDeck(riffSavePath, deckID) if nil != err { - logging.LogErrorf("load deck [%s] failed: %s", name, err) + logging.LogErrorf("load deck [%s] failed: %s", deckID, err) return } + deck.Name = name deckLock.Lock() - Decks[name] = deck + Decks[deckID] = deck deckLock.Unlock() return } -func GetDecks() (ret []string) { +func GetDecks() (decks []*riff.Deck) { deckLock.Lock() defer deckLock.Unlock() - for name := range Decks { - ret = append(ret, name) + for _, deck := range Decks { + decks = append(decks, deck) } - return -} - -func SaveDeck(name string) (err error) { - deckLock.Lock() - deck := Decks[name] - deckLock.Unlock() - - err = deck.Save() - if nil != err { - logging.LogErrorf("save deck [%s] failed: %s", name, err) - return + if 1 > len(decks) { + decks = []*riff.Deck{} } return }