diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 1cdfd3e1f..e7946596e 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1046,7 +1046,7 @@ "121": "該文檔中不存在網絡圖片", "123": "新增/選擇雲端同步目錄後才能啟用同步功能", "124": "請在 [設置 - 啟用雲端同步] 中開啟雲端同步", - "125": "自動同步下載失敗次數過多,請嘗試手動觸發同步,如果還有問題請回饋", + "125": "自動同步失敗次數過多,請嘗試手動觸發同步,如果還有問題請回饋", "126": "書籤不能為空", "127": "訂閱距過期還剩 [%d] 天,過期後雲端數據會被徹底刪除。續訂請訪問這裡", "128": "訂閱已經過期,過期後雲端數據會被徹底刪除,訂閱過期兩天后不再彈出該提醒,續訂請訪問這裡", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index d8840f050..e168e1f86 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1048,7 +1048,7 @@ "122": "该功能需在思源桌面端进行配置。如果你已经配置,请在顶部账号设置中进行刷新", "123": "添加/选择云端同步目录后才能启用同步功能", "124": "请在 [设置 - 启用云端同步] 中开启云端同步", - "125": "自动同步下载失败次数过多,请尝试手动触发同步,如果还有问题请反馈", + "125": "自动同步失败次数过多,请尝试手动触发同步,如果还有问题请反馈", "126": "书签不能为空", "127": "订阅距过期还剩 [%d] 天,过期后云端数据会被彻底删除。续订请访问这里", "128": "订阅已经过期,过期后云端数据会被彻底删除,订阅过期两天后不再弹出该提醒,续订请访问这里", diff --git a/kernel/model/repository.go b/kernel/model/repository.go index 62a6c0a8c..59db74a26 100644 --- a/kernel/model/repository.go +++ b/kernel/model/repository.go @@ -902,7 +902,7 @@ func syncRepoDownload() (err error) { Conf.Sync.Synced = util.CurrentTimeMillis() msg := fmt.Sprintf(Conf.Language(150), trafficStat.UploadFileCount, trafficStat.DownloadFileCount, trafficStat.UploadChunkCount, trafficStat.DownloadChunkCount, humanize.Bytes(uint64(trafficStat.UploadBytes)), humanize.Bytes(uint64(trafficStat.DownloadBytes))) Conf.Sync.Stat = msg - syncDownloadErrCount = 0 + autoSyncErrCount = 0 logging.LogInfof("synced data repo download [provider=%d, ufc=%d, dfc=%d, ucc=%d, dcc=%d, ub=%s, db=%s] in [%.2fs]", Conf.Sync.Provider, trafficStat.UploadFileCount, trafficStat.DownloadFileCount, trafficStat.UploadChunkCount, trafficStat.DownloadChunkCount, humanize.Bytes(uint64(trafficStat.UploadBytes)), humanize.Bytes(uint64(trafficStat.DownloadBytes)), elapsed.Seconds()) @@ -969,6 +969,7 @@ func syncRepoUpload() (err error) { Conf.Sync.Synced = util.CurrentTimeMillis() msg := fmt.Sprintf(Conf.Language(150), trafficStat.UploadFileCount, trafficStat.DownloadFileCount, trafficStat.UploadChunkCount, trafficStat.DownloadChunkCount, humanize.Bytes(uint64(trafficStat.UploadBytes)), humanize.Bytes(uint64(trafficStat.DownloadBytes))) Conf.Sync.Stat = msg + autoSyncErrCount = 0 logging.LogInfof("synced data repo upload [provider=%d, ufc=%d, dfc=%d, ucc=%d, dcc=%d, ub=%s, db=%s] in [%.2fs]", Conf.Sync.Provider, trafficStat.UploadFileCount, trafficStat.DownloadFileCount, trafficStat.UploadChunkCount, trafficStat.DownloadChunkCount, humanize.Bytes(uint64(trafficStat.UploadBytes)), humanize.Bytes(uint64(trafficStat.DownloadBytes)), elapsed.Seconds()) return @@ -976,7 +977,7 @@ func syncRepoUpload() (err error) { func bootSyncRepo() (err error) { if 1 > len(Conf.Repo.Key) { - syncDownloadErrCount++ + autoSyncErrCount++ planSyncAfter(fixSyncInterval) msg := Conf.Language(26) @@ -988,7 +989,7 @@ func bootSyncRepo() (err error) { repo, err := newRepository() if nil != err { - syncDownloadErrCount++ + autoSyncErrCount++ planSyncAfter(fixSyncInterval) msg := fmt.Sprintf("sync repo failed: %s", err) @@ -1001,7 +1002,7 @@ func bootSyncRepo() (err error) { start := time.Now() err = indexRepoBeforeCloudSync(repo) if nil != err { - syncDownloadErrCount++ + autoSyncErrCount++ planSyncAfter(fixSyncInterval) return } @@ -1032,7 +1033,7 @@ func bootSyncRepo() (err error) { elapsed := time.Since(start) logging.LogInfof("boot get sync cloud files elapsed [%.2fs]", elapsed.Seconds()) if nil != err { - syncDownloadErrCount++ + autoSyncErrCount++ planSyncAfter(fixSyncInterval) logging.LogErrorf("sync data repo failed: %s", err) @@ -1067,7 +1068,7 @@ func bootSyncRepo() (err error) { func syncRepo(exit, byHand bool) (err error) { if 1 > len(Conf.Repo.Key) { - syncDownloadErrCount++ + autoSyncErrCount++ planSyncAfter(fixSyncInterval) msg := Conf.Language(26) @@ -1079,7 +1080,7 @@ func syncRepo(exit, byHand bool) (err error) { repo, err := newRepository() if nil != err { - syncDownloadErrCount++ + autoSyncErrCount++ planSyncAfter(fixSyncInterval) msg := fmt.Sprintf("sync repo failed: %s", err) @@ -1092,7 +1093,7 @@ func syncRepo(exit, byHand bool) (err error) { start := time.Now() err = indexRepoBeforeCloudSync(repo) if nil != err { - syncDownloadErrCount++ + autoSyncErrCount++ planSyncAfter(fixSyncInterval) return } @@ -1107,7 +1108,7 @@ func syncRepo(exit, byHand bool) (err error) { } elapsed := time.Since(start) if nil != err { - syncDownloadErrCount++ + autoSyncErrCount++ planSyncAfter(fixSyncInterval) logging.LogErrorf("sync data repo failed: %s", err) @@ -1120,7 +1121,9 @@ func syncRepo(exit, byHand bool) (err error) { } Conf.Sync.Stat = msg util.PushStatusBar(msg) - util.PushErrMsg(msg, 0) + if 1 > autoSyncErrCount || byHand { + util.PushErrMsg(msg, 0) + } if exit { ExitSyncSucc = 1 } @@ -1131,7 +1134,7 @@ func syncRepo(exit, byHand bool) (err error) { Conf.Sync.Synced = util.CurrentTimeMillis() msg := fmt.Sprintf(Conf.Language(150), trafficStat.UploadFileCount, trafficStat.DownloadFileCount, trafficStat.UploadChunkCount, trafficStat.DownloadChunkCount, humanize.Bytes(uint64(trafficStat.UploadBytes)), humanize.Bytes(uint64(trafficStat.DownloadBytes))) Conf.Sync.Stat = msg - syncDownloadErrCount = 0 + autoSyncErrCount = 0 logging.LogInfof("synced data repo [provider=%d, ufc=%d, dfc=%d, ucc=%d, dcc=%d, ub=%s, db=%s] in [%.2fs]", Conf.Sync.Provider, trafficStat.UploadFileCount, trafficStat.DownloadFileCount, trafficStat.UploadChunkCount, trafficStat.DownloadChunkCount, humanize.Bytes(uint64(trafficStat.UploadBytes)), humanize.Bytes(uint64(trafficStat.DownloadBytes)), elapsed.Seconds()) diff --git a/kernel/model/sync.go b/kernel/model/sync.go index cbceac559..3fd814eb5 100644 --- a/kernel/model/sync.go +++ b/kernel/model/sync.go @@ -46,7 +46,7 @@ func SyncDataDownload() { } util.BroadcastByType("main", "syncing", 0, Conf.Language(81), nil) - if !isProviderOnline() { // 这个操作比较耗时,所以要先推送 syncing 事件后再判断网络,这样才能给用户更即时的反馈 + if !isProviderOnline(true) { // 这个操作比较耗时,所以要先推送 syncing 事件后再判断网络,这样才能给用户更即时的反馈 util.BroadcastByType("main", "syncing", 2, Conf.Language(28), nil) return } @@ -82,7 +82,7 @@ func SyncDataUpload() { } util.BroadcastByType("main", "syncing", 0, Conf.Language(81), nil) - if !isProviderOnline() { // 这个操作比较耗时,所以要先推送 syncing 事件后再判断网络,这样才能给用户更即时的反馈 + if !isProviderOnline(true) { // 这个操作比较耗时,所以要先推送 syncing 事件后再判断网络,这样才能给用户更即时的反馈 util.BroadcastByType("main", "syncing", 2, Conf.Language(28), nil) return } @@ -112,10 +112,10 @@ func SyncDataUpload() { } var ( - syncSameCount = 0 - syncDownloadErrCount = 0 - fixSyncInterval = 5 * time.Minute - syncPlanTime = time.Now().Add(fixSyncInterval) + syncSameCount = 0 + autoSyncErrCount = 0 + fixSyncInterval = 5 * time.Minute + syncPlanTime = time.Now().Add(fixSyncInterval) BootSyncSucc = -1 // -1:未执行,0:执行成功,1:执行失败 ExitSyncSucc = -1 @@ -136,7 +136,7 @@ func BootSyncData() { return } - if !isProviderOnline() { + if !isProviderOnline(false) { BootSyncSucc = 1 util.PushErrMsg(Conf.Language(28), 7000) return @@ -182,7 +182,7 @@ func syncData(exit, byHand bool) { } util.BroadcastByType("main", "syncing", 0, Conf.Language(81), nil) - if !exit && !isProviderOnline() { // 这个操作比较耗时,所以要先推送 syncing 事件后再判断网络,这样才能给用户更即时的反馈 + if !exit && !isProviderOnline(byHand) { // 这个操作比较耗时,所以要先推送 syncing 事件后再判断网络,这样才能给用户更即时的反馈 util.BroadcastByType("main", "syncing", 2, Conf.Language(28), nil) return } @@ -250,8 +250,8 @@ func checkSync(boot, exit, byHand bool) bool { return false } - if 7 < syncDownloadErrCount && !byHand { - logging.LogErrorf("sync download error too many times, cancel auto sync, try to sync by hand") + if 7 < autoSyncErrCount && !byHand { + logging.LogErrorf("failed to auto-sync too many times, delay auto-sync 64 minutes") util.PushErrMsg(Conf.Language(125), 1000*60*60) planSyncAfter(64 * time.Minute) return false @@ -561,7 +561,7 @@ func planSyncAfter(d time.Duration) { syncPlanTime = time.Now().Add(d) } -func isProviderOnline() (ret bool) { +func isProviderOnline(byHand bool) (ret bool) { checkURL := util.SiYuanSyncServer skipTlsVerify := false switch Conf.Sync.Provider { @@ -578,7 +578,9 @@ func isProviderOnline() (ret bool) { } if ret = util.IsOnline(checkURL, skipTlsVerify); !ret { - util.PushErrMsg(Conf.Language(76) + " (Provider: " + conf.ProviderToStr(Conf.Sync.Provider) + ")", 5000) + if 1 > autoSyncErrCount || byHand { + util.PushErrMsg(Conf.Language(76)+" (Provider: "+conf.ProviderToStr(Conf.Sync.Provider)+")", 5000) + } } return }