🎨 Automatically apply code snippets after data synchronization https://github.com/siyuan-note/siyuan/issues/16736

Signed-off-by: Daniel <845765@qq.com>
This commit is contained in:
Daniel 2026-01-02 12:38:37 +08:00
parent aea569078b
commit 28c51981e4
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
3 changed files with 19 additions and 2 deletions

View file

@ -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) {

View file

@ -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 {

View file

@ -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)