From 28c51981e45339111eecfec441771bf9f4883fcb Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 2 Jan 2026 12:38:37 +0800 Subject: [PATCH] :art: Automatically apply code snippets after data synchronization https://github.com/siyuan-note/siyuan/issues/16736 Signed-off-by: Daniel <845765@qq.com> --- kernel/api/setting.go | 2 +- kernel/model/push_reload.go | 5 +++++ kernel/model/repository.go | 14 +++++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/kernel/api/setting.go b/kernel/api/setting.go index b6f888d45..029b6e4b7 100644 --- a/kernel/api/setting.go +++ b/kernel/api/setting.go @@ -79,7 +79,7 @@ func setConfSnippet(c *gin.Context) { model.Conf.Save() ret.Data = snippet - util.BroadcastByType("main", "setSnippet", 0, "", snippet) + model.PushReloadSnippet(snippet) } func addVirtualBlockRefExclude(c *gin.Context) { diff --git a/kernel/model/push_reload.go b/kernel/model/push_reload.go index 08dae774d..d0ba464ca 100644 --- a/kernel/model/push_reload.go +++ b/kernel/model/push_reload.go @@ -31,6 +31,7 @@ import ( "github.com/emirpasic/gods/sets/hashset" "github.com/siyuan-note/logging" "github.com/siyuan-note/siyuan/kernel/av" + "github.com/siyuan-note/siyuan/kernel/conf" "github.com/siyuan-note/siyuan/kernel/filesys" "github.com/siyuan-note/siyuan/kernel/sql" "github.com/siyuan-note/siyuan/kernel/task" @@ -38,6 +39,10 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func PushReloadSnippet(snippet *conf.Snpt) { + util.BroadcastByType("main", "setSnippet", 0, "", snippet) +} + func PushReloadPlugin(upsertCodePluginSet, upsertDataPluginSet, unloadPluginNameSet, uninstallPluginNameSet *hashset.Set, excludeApp string) { // 集合去重 if nil != uninstallPluginNameSet { diff --git a/kernel/model/repository.go b/kernel/model/repository.go index e7486ac18..8c7960a81 100644 --- a/kernel/model/repository.go +++ b/kernel/model/repository.go @@ -1595,7 +1595,7 @@ func processSyncMergeResult(exit, byHand bool, mergeResult *dejavu.MergeResult, var upserts, removes []string var upsertTrees int // 可能需要重新加载部分功能 - var needReloadFlashcard, needReloadOcrTexts, needReloadPlugin bool + var needReloadFlashcard, needReloadOcrTexts, needReloadPlugin, needReloadSnippet bool upsertCodePluginSet := hashset.New() // 插件代码变更 data/plugins/ upsertDataPluginSet := hashset.New() // 插件存储数据变更 data/storage/petal/ needUnindexBoxes, needIndexBoxes := map[string]bool{}, map[string]bool{} @@ -1640,6 +1640,10 @@ func processSyncMergeResult(exit, byHand bool, mergeResult *dejavu.MergeResult, absPath := filepath.Join(util.DataDir, file.Path) HandleAssetsChangeEvent(absPath) } + + if file.Path == "/snippets/conf.json" { + needReloadSnippet = true + } } removeWidgetDirSet, unloadPluginSet, uninstallPluginSet := hashset.New(), hashset.New(), hashset.New() @@ -1686,6 +1690,10 @@ func processSyncMergeResult(exit, byHand bool, mergeResult *dejavu.MergeResult, absPath := filepath.Join(util.DataDir, file.Path) HandleAssetsRemoveEvent(absPath) } + + if file.Path == "/snippets/conf.json" { + needReloadSnippet = true + } } for _, upsertPetal := range mergeResult.UpsertPetals { @@ -1710,6 +1718,10 @@ func processSyncMergeResult(exit, byHand bool, mergeResult *dejavu.MergeResult, PushReloadPlugin(upsertCodePluginSet, upsertDataPluginSet, unloadPluginSet, uninstallPluginSet, "") } + if needReloadSnippet { + PushReloadSnippet(Conf.Snippet) + } + for _, widgetDir := range removeWidgetDirSet.Values() { widgetDirPath := filepath.Join(util.DataDir, "widgets", widgetDir.(string)) gulu.File.RemoveEmptyDirs(widgetDirPath)