Skip to content

Commit cd659f9

Browse files
committed
optimize: only reload revision file tree when FILES tab is actived
Signed-off-by: leo <longshuang@msn.cn>
1 parent 3b9ac37 commit cd659f9

File tree

1 file changed

+49
-27
lines changed

1 file changed

+49
-27
lines changed

src/Views/RevisionFileTreeView.axaml.cs

Lines changed: 49 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Avalonia.Controls;
99
using Avalonia.Controls.Primitives;
1010
using Avalonia.Input;
11+
using Avalonia.Interactivity;
1112
using Avalonia.Layout;
1213
using Avalonia.Media;
1314
using Avalonia.Platform.Storage;
@@ -301,34 +302,19 @@ protected override async void OnPropertyChanged(AvaloniaPropertyChangedEventArgs
301302
_tree.Clear();
302303
_searchResult.Clear();
303304

304-
var vm = DataContext as ViewModels.CommitDetail;
305-
if (vm?.Commit == null)
306-
{
307-
Rows.Clear();
308-
GC.Collect();
309-
return;
310-
}
311-
312-
var objects = await vm.GetRevisionFilesUnderFolderAsync(null);
313-
if (objects == null || objects.Count == 0)
314-
{
305+
if (DataContext is ViewModels.CommitDetail { ActiveTabIndex: 2 } vm)
306+
await ReloadTreeData(vm);
307+
else
315308
Rows.Clear();
316-
GC.Collect();
317-
return;
318-
}
319-
320-
foreach (var obj in objects)
321-
_tree.Add(new ViewModels.RevisionFileTreeNode { Backend = obj });
322-
323-
SortNodes(_tree);
309+
}
310+
}
324311

325-
var topTree = new List<ViewModels.RevisionFileTreeNode>();
326-
MakeRows(topTree, _tree, 0);
312+
protected override async void OnLoaded(RoutedEventArgs e)
313+
{
314+
base.OnLoaded(e);
327315

328-
Rows.Clear();
329-
Rows.AddRange(topTree);
330-
GC.Collect();
331-
}
316+
if (DataContext is ViewModels.CommitDetail vm && _tree.Count == 0)
317+
await ReloadTreeData(vm);
332318
}
333319

334320
private void OnTreeNodeContextRequested(object sender, ContextRequestedEventArgs e)
@@ -416,7 +402,42 @@ private void SortNodes(List<ViewModels.RevisionFileTreeNode> nodes)
416402
});
417403
}
418404

419-
public ContextMenu CreateRevisionFileContextMenuByFolder(ViewModels.Repository repo, ViewModels.CommitDetail vm, Models.Commit commit, string path)
405+
private async Task ReloadTreeData(ViewModels.CommitDetail vm)
406+
{
407+
if (_isReloadingTreeData)
408+
return;
409+
410+
_isReloadingTreeData = true;
411+
412+
if (vm?.Commit == null)
413+
{
414+
Rows.Clear();
415+
_isReloadingTreeData = false;
416+
return;
417+
}
418+
419+
var objects = await vm.GetRevisionFilesUnderFolderAsync(null);
420+
if (objects == null || objects.Count == 0)
421+
{
422+
Rows.Clear();
423+
_isReloadingTreeData = false;
424+
return;
425+
}
426+
427+
foreach (var obj in objects)
428+
_tree.Add(new ViewModels.RevisionFileTreeNode { Backend = obj });
429+
430+
SortNodes(_tree);
431+
432+
var topTree = new List<ViewModels.RevisionFileTreeNode>();
433+
MakeRows(topTree, _tree, 0);
434+
435+
Rows.Clear();
436+
Rows.AddRange(topTree);
437+
_isReloadingTreeData = false;
438+
}
439+
440+
private ContextMenu CreateRevisionFileContextMenuByFolder(ViewModels.Repository repo, ViewModels.CommitDetail vm, Models.Commit commit, string path)
420441
{
421442
var fullPath = Native.OS.GetAbsPath(repo.FullPath, path);
422443
var explore = new MenuItem();
@@ -468,7 +489,7 @@ public ContextMenu CreateRevisionFileContextMenuByFolder(ViewModels.Repository r
468489
return menu;
469490
}
470491

471-
public ContextMenu CreateRevisionFileContextMenu(ViewModels.Repository repo, ViewModels.CommitDetail vm, Models.Commit commit, Models.Object file)
492+
private ContextMenu CreateRevisionFileContextMenu(ViewModels.Repository repo, ViewModels.CommitDetail vm, Models.Commit commit, Models.Object file)
472493
{
473494
var fullPath = Native.OS.GetAbsPath(repo.FullPath, file.Path);
474495
var menu = new ContextMenu();
@@ -674,5 +695,6 @@ public ContextMenu CreateRevisionFileContextMenu(ViewModels.Repository repo, Vie
674695
private List<ViewModels.RevisionFileTreeNode> _tree = [];
675696
private bool _disableSelectionChangingEvent = false;
676697
private List<ViewModels.RevisionFileTreeNode> _searchResult = [];
698+
private bool _isReloadingTreeData = false;
677699
}
678700
}

0 commit comments

Comments
 (0)