Skip to content

Commit 338328c

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 338328c

File tree

1 file changed

+40
-27
lines changed

1 file changed

+40
-27
lines changed

src/Views/RevisionFileTreeView.axaml.cs

Lines changed: 40 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 (_tree.Count == 0 && DataContext is ViewModels.CommitDetail vm)
317+
await ReloadTreeData(vm);
332318
}
333319

334320
private void OnTreeNodeContextRequested(object sender, ContextRequestedEventArgs e)
@@ -416,7 +402,34 @@ 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 (vm?.Commit == null)
408+
{
409+
Rows.Clear();
410+
return;
411+
}
412+
413+
var objects = await vm.GetRevisionFilesUnderFolderAsync(null);
414+
if (objects == null || objects.Count == 0)
415+
{
416+
Rows.Clear();
417+
return;
418+
}
419+
420+
foreach (var obj in objects)
421+
_tree.Add(new ViewModels.RevisionFileTreeNode { Backend = obj });
422+
423+
SortNodes(_tree);
424+
425+
var topTree = new List<ViewModels.RevisionFileTreeNode>();
426+
MakeRows(topTree, _tree, 0);
427+
428+
Rows.Clear();
429+
Rows.AddRange(topTree);
430+
}
431+
432+
private ContextMenu CreateRevisionFileContextMenuByFolder(ViewModels.Repository repo, ViewModels.CommitDetail vm, Models.Commit commit, string path)
420433
{
421434
var fullPath = Native.OS.GetAbsPath(repo.FullPath, path);
422435
var explore = new MenuItem();
@@ -468,7 +481,7 @@ public ContextMenu CreateRevisionFileContextMenuByFolder(ViewModels.Repository r
468481
return menu;
469482
}
470483

471-
public ContextMenu CreateRevisionFileContextMenu(ViewModels.Repository repo, ViewModels.CommitDetail vm, Models.Commit commit, Models.Object file)
484+
private ContextMenu CreateRevisionFileContextMenu(ViewModels.Repository repo, ViewModels.CommitDetail vm, Models.Commit commit, Models.Object file)
472485
{
473486
var fullPath = Native.OS.GetAbsPath(repo.FullPath, file.Path);
474487
var menu = new ContextMenu();

0 commit comments

Comments
 (0)