diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 87f93bca9..352c171f4 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1,4 +1,6 @@ { + "generateConflictDoc": "Generate conflict documentation when syncing conflicts", + "generateConflictDocTip": "After enabling, a conflict document will be generated when a synchronization conflict occurs, so that it can be opened and viewed directly. Whether enabled or not, the data history will record the conflict document", "deleteOpConfirm": "⚠️ Delete operation confirmation", "filterDocNameEnter": "Filter doc name Enter", "defBlock": "Def block", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index e29ab4e11..9bb04cadb 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1,4 +1,6 @@ { + "generateConflictDoc": "Generar documentación de conflicto al sincronizar conflictos", + "generateConflictDocTip": "Cuando está habilitado, se generará un documento de conflicto cuando ocurra un conflicto de sincronización, para que pueda abrirse y verse directamente. Ya sea que esté habilitado o no, el historial de datos registrará el documento de conflicto", "deleteOpConfirm": "⚠️ Confirmación de operación de eliminación", "filterDocNameEnter": "Filtrar doc name Enter", "defBlock": "Definir bloque", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 43931263a..37c5bc02e 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1,4 +1,6 @@ { + "generateConflictDoc": "Générer une documentation sur les conflits lors de la synchronisation des conflits", + "generateConflictDocTip": "Lorsqu'il est activé, un document de conflit sera généré lorsqu'un conflit de synchronisation se produit, afin qu'il puisse être ouvert et visualisé directement. Qu'il soit activé ou non, l'historique des données enregistrera le document de conflit", "deleteOpConfirm": "⚠️ Supprimer la confirmation de l'opération", "filterDocNameEnter": "Filtre doc name Enter", "defBlock": "Définir le bloc", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 75470499c..357662a49 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1,4 +1,6 @@ { + "generateConflictDoc": "同步衝突時生成衝突文檔", + "generateConflictDocTip": "啟用後當同步發生衝突時會生成衝突文檔,以便直接打開查看。無論是否啟用,數據歷史都會記錄衝突文檔", "deleteOpConfirm": "⚠️ Delete operation confirmation", "filterDocNameEnter": "過濾文檔名 Enter", "defBlock": "定義塊", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index ad57fc55f..96bd1e5ca 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1,4 +1,6 @@ { + "generateConflictDoc": "同步冲突时生成冲突文档", + "generateConflictDocTip": "启用后当同步发生冲突时会生成冲突文档,以便直接打开查看。无论是否启用,数据历史都会记录冲突文档", "deleteOpConfirm": "⚠️ 删除操作确认", "filterDocNameEnter": "过滤文档名 Enter", "defBlock": "定义块", diff --git a/kernel/api/sync.go b/kernel/api/sync.go index aedb50a81..97afc5c25 100644 --- a/kernel/api/sync.go +++ b/kernel/api/sync.go @@ -108,6 +108,19 @@ func createCloudSyncDir(c *gin.Context) { } } +func setSyncGenerateConflictDoc(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + enabled := arg["enabled"].(bool) + model.SetSyncGenerateConflictDoc(enabled) +} + func setSyncEnable(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) diff --git a/kernel/conf/sync.go b/kernel/conf/sync.go index ed880d24e..fdfc71552 100644 --- a/kernel/conf/sync.go +++ b/kernel/conf/sync.go @@ -17,17 +17,19 @@ package conf type Sync struct { - CloudName string `json:"cloudName"` // 云端同步目录名称 - Enabled bool `json:"enabled"` // 是否开启同步 - Mode int `json:"mode"` // 同步模式,0:未设置(为兼容已有配置,initConf 函数中会转换为 1),1:自动,2:手动 https://github.com/siyuan-note/siyuan/issues/5089 - Synced int64 `json:"synced"` // 最近同步时间 - Stat string `json:"stat"` // 最近同步统计信息 + CloudName string `json:"cloudName"` // 云端同步目录名称 + Enabled bool `json:"enabled"` // 是否开启同步 + Mode int `json:"mode"` // 同步模式,0:未设置(为兼容已有配置,initConf 函数中会转换为 1),1:自动,2:手动 https://github.com/siyuan-note/siyuan/issues/5089 + Synced int64 `json:"synced"` // 最近同步时间 + Stat string `json:"stat"` // 最近同步统计信息 + GenerateConflictDoc bool `json:"generateConflictDoc"` // 云端同步冲突时是否生成冲突文档 } func NewSync() *Sync { return &Sync{ - CloudName: "main", - Enabled: false, - Mode: 1, + CloudName: "main", + Enabled: false, + Mode: 1, + GenerateConflictDoc: false, } } diff --git a/kernel/model/repository.go b/kernel/model/repository.go index fa4c8c765..21eeae7e2 100644 --- a/kernel/model/repository.go +++ b/kernel/model/repository.go @@ -541,7 +541,7 @@ func syncRepo(boot, exit, byHand bool) (err error) { logSyncMergeResult(mergeResult) - if 0 < len(mergeResult.Conflicts) { + if 0 < len(mergeResult.Conflicts) && Conf.Sync.GenerateConflictDoc { // 云端同步发生冲突时生成副本 https://github.com/siyuan-note/siyuan/issues/5687 luteEngine := NewLute() diff --git a/kernel/model/sync.go b/kernel/model/sync.go index aa9ab95c4..380105bf1 100644 --- a/kernel/model/sync.go +++ b/kernel/model/sync.go @@ -216,6 +216,15 @@ func SetCloudSyncDir(name string) { Conf.Save() } +func SetSyncGenerateConflictDoc(b bool) { + syncLock.Lock() + defer syncLock.Unlock() + + Conf.Sync.GenerateConflictDoc = b + Conf.Save() + return +} + func SetSyncEnable(b bool) (err error) { syncLock.Lock() defer syncLock.Unlock()