From 34be74d74f0247b396ccae65a27b7eacb48a00b4 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Thu, 16 Jun 2022 18:21:42 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E4=B9=A6=E7=AD=BE=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20`=E5=88=A0=E9=99=A4`=20=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E5=88=A0=E9=99=A4=E4=B9=A6=E7=AD=BE=E7=BB=84?= =?UTF-8?q?=20https://github.com/siyuan-note/siyuan/issues/5155?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/api/bookmark.go | 18 ++++++++++++++++ kernel/api/router.go | 1 + kernel/model/bookmark.go | 46 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/kernel/api/bookmark.go b/kernel/api/bookmark.go index 0964aa989..5ca469604 100644 --- a/kernel/api/bookmark.go +++ b/kernel/api/bookmark.go @@ -32,6 +32,24 @@ func getBookmark(c *gin.Context) { ret.Data = model.BuildBookmark() } +func removeBookmark(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + bookmark := arg["bookmark"].(string) + if err := model.RemoveBookmark(bookmark); nil != err { + ret.Code = -1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } +} + func renameBookmark(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 fc807c060..52b233f03 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -103,6 +103,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/outline/getDocOutline", model.CheckAuth, getDocOutline) ginServer.Handle("POST", "/api/bookmark/getBookmark", model.CheckAuth, getBookmark) ginServer.Handle("POST", "/api/bookmark/renameBookmark", model.CheckAuth, renameBookmark) + ginServer.Handle("POST", "/api/bookmark/removeBookmark", model.CheckAuth, removeBookmark) ginServer.Handle("POST", "/api/tag/getTag", model.CheckAuth, getTag) ginServer.Handle("POST", "/api/tag/renameTag", model.CheckAuth, renameTag) ginServer.Handle("POST", "/api/tag/removeTag", model.CheckAuth, removeTag) diff --git a/kernel/model/bookmark.go b/kernel/model/bookmark.go index 80c50197f..012945a53 100644 --- a/kernel/model/bookmark.go +++ b/kernel/model/bookmark.go @@ -27,6 +27,52 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func RemoveBookmark(bookmark string) (err error) { + util.PushEndlessProgress(Conf.Language(116)) + + bookmarks := sql.QueryBookmarkBlocksByKeyword(bookmark) + treeBlocks := map[string][]string{} + for _, tag := range bookmarks { + if blocks, ok := treeBlocks[tag.RootID]; !ok { + treeBlocks[tag.RootID] = []string{tag.ID} + } else { + treeBlocks[tag.RootID] = append(blocks, tag.ID) + } + } + + for treeID, blocks := range treeBlocks { + util.PushEndlessProgress("[" + treeID + "]") + tree, e := loadTreeByBlockID(treeID) + if nil != e { + util.PushClearProgress() + return e + } + + for _, blockID := range blocks { + node := treenode.GetNodeInTree(tree, blockID) + if nil == node { + continue + } + + if bookmarkAttrVal := node.IALAttr("bookmark"); bookmarkAttrVal == bookmark { + node.RemoveIALAttr("bookmark") + } + } + + util.PushEndlessProgress(fmt.Sprintf(Conf.Language(111), tree.Root.IALAttr("title"))) + if err = writeJSONQueue(tree); nil != err { + util.ClearPushProgress(100) + return + } + util.RandomSleep(50, 150) + } + + util.PushEndlessProgress(Conf.Language(113)) + sql.WaitForWritingDatabase() + util.ReloadUI() + return +} + func RenameBookmark(oldBookmark, newBookmark string) (err error) { if treenode.ContainsMarker(newBookmark) { return errors.New(Conf.Language(112))