diff --git a/kernel/api/router.go b/kernel/api/router.go index 571f78f01..4d05190c8 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -308,6 +308,8 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/setting/setAI", model.CheckAuth, model.CheckReadonly, setAI) ginServer.Handle("POST", "/api/setting/setBazaar", model.CheckAuth, model.CheckReadonly, setBazaar) ginServer.Handle("POST", "/api/setting/refreshVirtualBlockRef", model.CheckAuth, model.CheckReadonly, refreshVirtualBlockRef) + ginServer.Handle("POST", "/api/setting/addVirtualBlockRefInclude", model.CheckAuth, model.CheckReadonly, addVirtualBlockRefInclude) + ginServer.Handle("POST", "/api/setting/addVirtualBlockRefExclude", model.CheckAuth, model.CheckReadonly, addVirtualBlockRefExclude) ginServer.Handle("POST", "/api/graph/resetGraph", model.CheckAuth, model.CheckReadonly, resetGraph) ginServer.Handle("POST", "/api/graph/resetLocalGraph", model.CheckAuth, model.CheckReadonly, resetLocalGraph) diff --git a/kernel/api/setting.go b/kernel/api/setting.go index c422fb400..b6bd898c3 100644 --- a/kernel/api/setting.go +++ b/kernel/api/setting.go @@ -29,6 +29,46 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func addVirtualBlockRefExclude(c *gin.Context) { + // Add internal kernel API `/api/setting/addVirtualBlockRefExclude` https://github.com/siyuan-note/siyuan/issues/9909 + + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + keywordsArg := arg["keywords"] + var keywords []string + for _, k := range keywordsArg.([]interface{}) { + keywords = append(keywords, k.(string)) + } + + model.AddVirtualBlockRefExclude(keywords) +} + +func addVirtualBlockRefInclude(c *gin.Context) { + // Add internal kernel API `/api/setting/addVirtualBlockRefInclude` https://github.com/siyuan-note/siyuan/issues/9909 + + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + keywordsArg := arg["keywords"] + var keywords []string + for _, k := range keywordsArg.([]interface{}) { + keywords = append(keywords, k.(string)) + } + + model.AddVirtualBlockRefInclude(keywords) +} + func refreshVirtualBlockRef(c *gin.Context) { // Add internal kernel API `/api/setting/refreshVirtualBlockRef` https://github.com/siyuan-note/siyuan/issues/9829 diff --git a/kernel/model/virutalref.go b/kernel/model/virutalref.go index 7b2718e8c..a1741e0c4 100644 --- a/kernel/model/virutalref.go +++ b/kernel/model/virutalref.go @@ -113,6 +113,42 @@ func ResetVirtualBlockRefCache() { CacheVirtualBlockRefJob() } +func AddVirtualBlockRefInclude(keyword []string) { + if 1 > len(keyword) { + return + } + + Conf.m.Lock() + defer Conf.m.Unlock() + + include := strings.ReplaceAll(Conf.Editor.VirtualBlockRefInclude, "\\,", "__comma@sep__") + includes := strings.Split(include, ",") + includes = append(includes, keyword...) + includes = gulu.Str.RemoveDuplicatedElem(includes) + Conf.Editor.VirtualBlockRefInclude = strings.Join(includes, ",") + Conf.Save() + + ResetVirtualBlockRefCache() +} + +func AddVirtualBlockRefExclude(keyword []string) { + if 1 > len(keyword) { + return + } + + Conf.m.Lock() + defer Conf.m.Unlock() + + exclude := strings.ReplaceAll(Conf.Editor.VirtualBlockRefExclude, "\\,", "__comma@sep__") + excludes := strings.Split(exclude, ",") + excludes = append(excludes, keyword...) + excludes = gulu.Str.RemoveDuplicatedElem(excludes) + Conf.Editor.VirtualBlockRefExclude = strings.Join(excludes, ",") + Conf.Save() + + ResetVirtualBlockRefCache() +} + func processVirtualRef(n *ast.Node, unlinks *[]*ast.Node, virtualBlockRefKeywords []string, refCount map[string]int, luteEngine *lute.Lute) bool { if !Conf.Editor.VirtualBlockRef { return false