|
8 | 8 | using Avalonia.Controls; |
9 | 9 | using Avalonia.Controls.Primitives; |
10 | 10 | using Avalonia.Input; |
| 11 | +using Avalonia.Interactivity; |
11 | 12 | using Avalonia.Layout; |
12 | 13 | using Avalonia.Media; |
13 | 14 | using Avalonia.Platform.Storage; |
@@ -301,34 +302,19 @@ protected override async void OnPropertyChanged(AvaloniaPropertyChangedEventArgs |
301 | 302 | _tree.Clear(); |
302 | 303 | _searchResult.Clear(); |
303 | 304 |
|
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 |
315 | 308 | 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 | + } |
324 | 311 |
|
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); |
327 | 315 |
|
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); |
332 | 318 | } |
333 | 319 |
|
334 | 320 | private void OnTreeNodeContextRequested(object sender, ContextRequestedEventArgs e) |
@@ -416,7 +402,42 @@ private void SortNodes(List<ViewModels.RevisionFileTreeNode> nodes) |
416 | 402 | }); |
417 | 403 | } |
418 | 404 |
|
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) |
420 | 441 | { |
421 | 442 | var fullPath = Native.OS.GetAbsPath(repo.FullPath, path); |
422 | 443 | var explore = new MenuItem(); |
@@ -468,7 +489,7 @@ public ContextMenu CreateRevisionFileContextMenuByFolder(ViewModels.Repository r |
468 | 489 | return menu; |
469 | 490 | } |
470 | 491 |
|
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) |
472 | 493 | { |
473 | 494 | var fullPath = Native.OS.GetAbsPath(repo.FullPath, file.Path); |
474 | 495 | var menu = new ContextMenu(); |
@@ -674,5 +695,6 @@ public ContextMenu CreateRevisionFileContextMenu(ViewModels.Repository repo, Vie |
674 | 695 | private List<ViewModels.RevisionFileTreeNode> _tree = []; |
675 | 696 | private bool _disableSelectionChangingEvent = false; |
676 | 697 | private List<ViewModels.RevisionFileTreeNode> _searchResult = []; |
| 698 | + private bool _isReloadingTreeData = false; |
677 | 699 | } |
678 | 700 | } |
0 commit comments