🎨 The plugin switch status is not synchronized https://github.com/siyuan-note/siyuan/issues/16155

Signed-off-by: Daniel <845765@qq.com>
This commit is contained in:
Daniel 2025-10-23 21:51:50 +08:00
parent f2191aad5f
commit 2815a744d5
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
3 changed files with 42 additions and 16 deletions

View file

@ -1148,6 +1148,8 @@ func syncRepoDownload() (err error) {
return
}
beforeSyncPetals := getPetals()
syncContext := map[string]interface{}{eventbus.CtxPushMsg: eventbus.CtxPushMsgToStatusBar}
mergeResult, trafficStat, err := repo.SyncDownload(syncContext)
elapsed := time.Since(start)
@ -1178,6 +1180,7 @@ func syncRepoDownload() (err error) {
autoSyncErrCount = 0
BootSyncSucc = 0
calcPetalDiff(beforeSyncPetals, mergeResult)
processSyncMergeResult(false, true, mergeResult, trafficStat, "d", elapsed)
return
}
@ -1441,6 +1444,8 @@ func syncRepo(exit, byHand bool) (dataChanged bool, err error) {
return
}
beforeSyncPetals := getPetals()
syncContext := map[string]interface{}{eventbus.CtxPushMsg: eventbus.CtxPushMsgToStatusBar}
mergeResult, trafficStat, err := repo.Sync(syncContext)
elapsed := time.Since(start)
@ -1478,6 +1483,7 @@ func syncRepo(exit, byHand bool) (dataChanged bool, err error) {
Conf.Save()
autoSyncErrCount = 0
calcPetalDiff(beforeSyncPetals, mergeResult)
processSyncMergeResult(exit, byHand, mergeResult, trafficStat, "a", elapsed)
if !exit {
@ -1491,6 +1497,30 @@ func syncRepo(exit, byHand bool) (dataChanged bool, err error) {
return
}
func calcPetalDiff(beforeSyncPetals []*Petal, mergeResult *dejavu.MergeResult) {
var upsertPetals, removePetals []string
afterSyncPetals := getPetals()
for _, afterSyncPetal := range afterSyncPetals {
if beforeSyncPetal := getPetalByName(afterSyncPetal.Name, beforeSyncPetals); nil != beforeSyncPetal {
a, _ := gulu.JSON.MarshalJSON(afterSyncPetal)
b, _ := gulu.JSON.MarshalJSON(beforeSyncPetal)
if !bytes.Equal(a, b) {
upsertPetals = append(upsertPetals, afterSyncPetal.Name)
}
} else {
upsertPetals = append(upsertPetals, afterSyncPetal.Name)
}
}
for _, beforeSyncPetal := range beforeSyncPetals {
if nil == getPetalByName(beforeSyncPetal.Name, afterSyncPetals) {
removePetals = append(removePetals, beforeSyncPetal.Name)
}
}
mergeResult.UpsertPetals = gulu.Str.RemoveDuplicatedElem(upsertPetals)
mergeResult.RemovePetals = gulu.Str.RemoveDuplicatedElem(removePetals)
}
func processSyncMergeResult(exit, byHand bool, mergeResult *dejavu.MergeResult, trafficStat *dejavu.TrafficStat, mode string, elapsed time.Duration) {
logging.LogInfof("synced data repo [device=%s, kernel=%s, provider=%d, mode=%s/%t, ufc=%d, dfc=%d, ucc=%d, dcc=%d, ub=%s, db=%s] in [%.2fs], merge result [conflicts=%d, upserts=%d, removes=%d]\n\n",
Conf.System.ID, KernelID, Conf.Sync.Provider, mode, byHand,
@ -1586,19 +1616,6 @@ func processSyncMergeResult(exit, byHand bool, mergeResult *dejavu.MergeResult,
if parts := strings.Split(file.Path, "/"); 3 < len(parts) {
if pluginName := parts[3]; "petals.json" != pluginName {
upsertPluginSet.Add(pluginName)
} else {
// 修改了 petals.json 则重新加载所有插件
// The plugin switch status is not synchronized https://github.com/siyuan-note/siyuan/issues/16155
entries, err := os.ReadDir(filepath.Join(util.DataDir, "plugins"))
if nil != err {
logging.LogErrorf("read plugins dir failed: %s", err)
} else {
for _, entry := range entries {
if entry.IsDir() {
upsertPluginSet.Add(entry.Name())
}
}
}
}
}
}
@ -1655,6 +1672,15 @@ func processSyncMergeResult(exit, byHand bool, mergeResult *dejavu.MergeResult,
}
}
for _, upsertPetal := range mergeResult.UpsertPetals {
needReloadPlugin = true
upsertPluginSet.Add(upsertPetal)
}
for _, removePetal := range mergeResult.RemovePetals {
needReloadPlugin = true
removePluginSet.Add(removePetal)
}
if needReloadFlashcard {
LoadFlashcards()
}