Skip to content

Commit 433ebcd

Browse files
committed
Merge pull request #1747 from Hosch250/Issue1744
Prevent hooks from requesting a parse for each component when opening a repo
2 parents 151566f + e19a4eb commit 433ebcd

File tree

2 files changed

+47
-8
lines changed

2 files changed

+47
-8
lines changed

RetailCoder.VBE/App.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public sealed class App : IDisposable
3434
private IRubberduckHooks _hooks;
3535
private bool _handleSinkEvents = true;
3636
private readonly BranchesViewViewModel _branchesVM;
37+
private readonly SourceControlViewViewModel _panelVM;
3738

3839
private readonly Logger _logger;
3940

@@ -67,11 +68,14 @@ public App(VBE vbe, IMessageBox messageBox,
6768
_logger = LogManager.GetCurrentClassLogger();
6869

6970
var sourceControlPanel = (SourceControlPanel) sourceControlPresenter.Window();
70-
var panelVM = (SourceControlViewViewModel) sourceControlPanel.ViewModel;
71-
_branchesVM = (BranchesViewViewModel) panelVM.TabItems.Single(t => t.ViewModel.Tab == SourceControlTab.Branches).ViewModel;
71+
_panelVM = (SourceControlViewViewModel) sourceControlPanel.ViewModel;
72+
_branchesVM = (BranchesViewViewModel) _panelVM.TabItems.Single(t => t.ViewModel.Tab == SourceControlTab.Branches).ViewModel;
7273

73-
_branchesVM.MergeStarted += _branchesVM_MergeStarted;
74-
_branchesVM.MergeCompleted += _branchesVM_MergeCompleted;
74+
_panelVM.OpenRepoStarted += DisableSinkEventHandlers;
75+
_panelVM.OpenRepoCompleted += EnableSinkEventHandlersAndUpdateCache;
76+
77+
_branchesVM.MergeStarted += DisableSinkEventHandlers;
78+
_branchesVM.MergeCompleted += EnableSinkEventHandlersAndUpdateCache;
7579

7680
_hooks.MessageReceived += _hooks_MessageReceived;
7781
_configService.SettingsChanged += _configService_SettingsChanged;
@@ -94,7 +98,7 @@ public App(VBE vbe, IMessageBox messageBox,
9498
UiDispatcher.Initialize();
9599
}
96100

97-
private void _branchesVM_MergeCompleted(object sender, EventArgs e)
101+
private void EnableSinkEventHandlersAndUpdateCache(object sender, EventArgs e)
98102
{
99103
_handleSinkEvents = true;
100104

@@ -105,7 +109,7 @@ private void _branchesVM_MergeCompleted(object sender, EventArgs e)
105109
_parser.State.OnParseRequested(this);
106110
}
107111

108-
private void _branchesVM_MergeStarted(object sender, EventArgs e)
112+
private void DisableSinkEventHandlers(object sender, EventArgs e)
109113
{
110114
_handleSinkEvents = false;
111115
}
@@ -446,10 +450,16 @@ public void Dispose()
446450
return;
447451
}
448452

453+
if (_panelVM != null)
454+
{
455+
_panelVM.OpenRepoStarted -= DisableSinkEventHandlers;
456+
_panelVM.OpenRepoCompleted -= EnableSinkEventHandlersAndUpdateCache;
457+
}
458+
449459
if (_branchesVM != null)
450460
{
451-
_branchesVM.MergeStarted -= _branchesVM_MergeStarted;
452-
_branchesVM.MergeCompleted -= _branchesVM_MergeCompleted;
461+
_branchesVM.MergeStarted -= DisableSinkEventHandlers;
462+
_branchesVM.MergeCompleted -= EnableSinkEventHandlersAndUpdateCache;
453463
}
454464

455465
if (_hooks != null)

RetailCoder.VBE/UI/SourceControl/SourceControlViewViewModel.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,15 +391,18 @@ private void OpenRepo()
391391
var project = _vbe.ActiveVBProject;
392392
var repo = new Repository(project.Name, folderPicker.SelectedPath, string.Empty);
393393

394+
OnOpenRepoStarted();
394395
try
395396
{
396397
Provider = _providerFactory.CreateProvider(project, repo, _wrapperFactory);
397398
}
398399
catch (SourceControlException ex)
399400
{
401+
OnOpenRepoCompleted();
400402
ViewModel_ErrorThrown(null, new ErrorEventArgs(ex.Message, ex.InnerException.Message, NotificationType.Error));
401403
return;
402404
}
405+
OnOpenRepoCompleted();
403406

404407
AddOrUpdateLocalPathConfig(repo);
405408

@@ -409,6 +412,8 @@ private void OpenRepo()
409412

410413
private void CloneRepo()
411414
{
415+
OnOpenRepoStarted();
416+
412417
try
413418
{
414419
_provider = _providerFactory.CreateProvider(_vbe.ActiveVBProject);
@@ -427,6 +432,7 @@ private void CloneRepo()
427432
return;
428433
}
429434

435+
OnOpenRepoCompleted();
430436
CloseCloneRepoGrid();
431437

432438
SetChildPresenterSourceControlProviders(_provider);
@@ -454,6 +460,7 @@ private void OpenRepoAssignedToProject()
454460

455461
try
456462
{
463+
OnOpenRepoStarted();
457464
Provider = _providerFactory.CreateProvider(_vbe.ActiveVBProject,
458465
_config.Repositories.First(repo => repo.Name == _vbe.ActiveVBProject.Name), _wrapperFactory);
459466
Status = RubberduckUI.Online;
@@ -463,6 +470,8 @@ private void OpenRepoAssignedToProject()
463470
ViewModel_ErrorThrown(null, new ErrorEventArgs(ex.Message, ex.InnerException.Message, NotificationType.Error));
464471
Status = RubberduckUI.Offline;
465472
}
473+
474+
OnOpenRepoCompleted();
466475
}
467476

468477
private void Refresh()
@@ -590,6 +599,26 @@ public ICommand LoginGridCancelCommand
590599
}
591600
}
592601

602+
public event EventHandler<EventArgs> OpenRepoStarted;
603+
private void OnOpenRepoStarted()
604+
{
605+
var handler = OpenRepoStarted;
606+
if (handler != null)
607+
{
608+
handler(this, EventArgs.Empty);
609+
}
610+
}
611+
612+
public event EventHandler<EventArgs> OpenRepoCompleted;
613+
private void OnOpenRepoCompleted()
614+
{
615+
var handler = OpenRepoCompleted;
616+
if (handler != null)
617+
{
618+
handler(this, EventArgs.Empty);
619+
}
620+
}
621+
593622
public void Dispose()
594623
{
595624
if (_state != null)

0 commit comments

Comments
 (0)