diff --git a/kernel/api/riff.go b/kernel/api/riff.go index 7ce46bdfa..c5eab1b82 100644 --- a/kernel/api/riff.go +++ b/kernel/api/riff.go @@ -153,6 +153,24 @@ func renameRiffDeck(c *gin.Context) { } } +func removeRiffDeck(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + deckID := arg["deckID"].(string) + err := model.RemoveDeck(deckID) + if nil != err { + ret.Code = -1 + ret.Msg = err.Error() + return + } +} + func createRiffDeck(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) diff --git a/kernel/api/router.go b/kernel/api/router.go index c75ea67e1..25b815443 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -301,6 +301,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/riff/createRiffDeck", model.CheckAuth, createRiffDeck) ginServer.Handle("POST", "/api/riff/renameRiffDeck", model.CheckAuth, renameRiffDeck) + ginServer.Handle("POST", "/api/riff/removeRiffDeck", model.CheckAuth, removeRiffDeck) ginServer.Handle("POST", "/api/riff/getRiffDecks", model.CheckAuth, getRiffDecks) ginServer.Handle("POST", "/api/riff/addRiffCards", model.CheckAuth, addRiffCards) ginServer.Handle("POST", "/api/riff/removeRiffCards", model.CheckAuth, removeRiffCards) diff --git a/kernel/model/flashcard.go b/kernel/model/flashcard.go index d5cd2d250..a77369aaa 100644 --- a/kernel/model/flashcard.go +++ b/kernel/model/flashcard.go @@ -293,6 +293,8 @@ func InitFlashcards() { return } + Decks = map[string]*riff.Deck{} + entries, err := os.ReadDir(riffSavePath) if nil != err { logging.LogErrorf("read riff dir failed: %s", err) @@ -320,7 +322,7 @@ func InitFlashcards() { } } -func RenameDeck(deckID string, name string) (err error) { +func RenameDeck(deckID, name string) (err error) { deckLock.Lock() deck := Decks[deckID] deckLock.Unlock() @@ -334,6 +336,21 @@ func RenameDeck(deckID string, name string) (err error) { return } +func RemoveDeck(deckID string) (err error) { + riffSavePath := getRiffDir() + deckPath := filepath.Join(riffSavePath, deckID+".deck") + if err = os.Remove(deckPath); nil != err { + return + } + cardsPath := filepath.Join(riffSavePath, deckID+".cards") + if err = os.Remove(cardsPath); nil != err { + return + } + + InitFlashcards() + return +} + func CreateDeck(name string) (deck *riff.Deck, err error) { riffSavePath := getRiffDir() deckID := ast.NewNodeID()