🎨 改进同步后全量重建索引判断 Fix https://github.com/siyuan-note/siyuan/issues/5764

This commit is contained in:
Liang Ding 2022-08-31 01:39:04 +08:00
parent 955bc042e6
commit 5139e51165
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
4 changed files with 39 additions and 8 deletions

View file

@ -480,6 +480,7 @@ func RefreshFileTree() {
util.PushErrMsg(fmt.Sprintf(Conf.Language(85), err), 5000)
return
}
treenode.InitBlockTree(true)
util.PushEndlessProgress(Conf.Language(35))
openedBoxes := Conf.GetOpenedBoxes()

View file

@ -502,7 +502,7 @@ func InitBoxes() {
}
}()
treenode.InitBlockTree()
treenode.InitBlockTree(false)
initialized = true
}
} else { // 大于 1 的话说明在同步阶段已经加载过了

View file

@ -497,7 +497,7 @@ func syncRepo(boot, exit, byHand bool) (err error) {
}
start := time.Now()
indexBeforeSync, err := indexRepoBeforeCloudSync(repo)
err = indexRepoBeforeCloudSync(repo)
if nil != err {
syncDownloadErrCount++
planSyncAfter(fixSyncInterval)
@ -592,21 +592,24 @@ func syncRepo(boot, exit, byHand bool) (err error) {
// 有数据变更,需要重建索引
var upserts, removes []string
var upsertTrees int
for _, file := range mergeResult.Upserts {
upserts = append(upserts, file.Path)
if strings.HasSuffix(file.Path, ".sy") {
upsertTrees++
}
}
for _, file := range mergeResult.Removes {
removes = append(removes, file.Path)
}
if boot && gulu.File.IsExist(util.BlockTreePath) {
treenode.InitBlockTree()
treenode.InitBlockTree(false)
}
cache.ClearDocsIAL() // 同步后文档树文档图标没有更新 https://github.com/siyuan-note/siyuan/issues/4939
fullReindex := 0.2 < float64(len(upserts))/float64(len(indexBeforeSync.Files))
if fullReindex { // 如果更新的文件比较多则全量重建索引
if needFullReindex(upsertTrees) { // 改进同步后全量重建索引判断 https://github.com/siyuan-note/siyuan/issues/5764
RefreshFileTree()
return
}
@ -626,10 +629,14 @@ func syncRepo(boot, exit, byHand bool) (err error) {
return
}
func indexRepoBeforeCloudSync(repo *dejavu.Repo) (index *entity.Index, err error) {
func needFullReindex(upsertTrees int) bool {
return 0.2 < float64(upsertTrees)/float64(treenode.CountTrees())
}
func indexRepoBeforeCloudSync(repo *dejavu.Repo) (err error) {
start := time.Now()
latest, _ := repo.Latest()
index, err = repo.Index("[Sync] Cloud sync", map[string]interface{}{
index, err := repo.Index("[Sync] Cloud sync", map[string]interface{}{
dejavu.CtxPushMsg: dejavu.CtxPushMsgToStatusBar,
})
if nil != err {