Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit eb47902

Browse files
committed
Avoid redundant repository change events
Previously both TeamExplorerNavigationItemBase and TeamExplorerItemBase were listring for repository change events. This changes it so that only TeamExplorerItemBase needs to listen for change events. TeamExplorerNavigationItemBase needs to subscribe before the item is visible (the event is required to make it visible).
1 parent 5177f2d commit eb47902

File tree

2 files changed

+15
-61
lines changed

2 files changed

+15
-61
lines changed

src/GitHub.TeamFoundation.14/Base/TeamExplorerNavigationItemBase.cs

Lines changed: 2 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
using System;
22
using System.Diagnostics;
33
using System.Drawing;
4-
using System.ComponentModel;
54
using GitHub.Api;
65
using GitHub.Extensions;
76
using GitHub.Services;
87
using GitHub.UI;
98
using GitHub.VisualStudio.Helpers;
109
using Microsoft.TeamFoundation.Controls;
1110
using Microsoft.VisualStudio.PlatformUI;
12-
using GitHub.Models;
1311

1412
namespace GitHub.VisualStudio.Base
1513
{
@@ -39,25 +37,8 @@ public TeamExplorerNavigationItemBase(IGitHubServiceProvider serviceProvider,
3937
Invalidate();
4038
};
4139

42-
UpdateRepoOnMainThread(holder.TeamExplorerContext.ActiveRepository);
43-
holder.TeamExplorerContext.PropertyChanged += TeamExplorerContext_PropertyChanged;
44-
}
45-
46-
void TeamExplorerContext_PropertyChanged(object sender, PropertyChangedEventArgs e)
47-
{
48-
if (e.PropertyName == nameof(holder.TeamExplorerContext.ActiveRepository))
49-
{
50-
UpdateRepoOnMainThread(holder.TeamExplorerContext.ActiveRepository);
51-
}
52-
}
53-
54-
void UpdateRepoOnMainThread(LocalRepositoryModel repo)
55-
{
56-
holder.JoinableTaskFactory.RunAsync(async () =>
57-
{
58-
await holder.JoinableTaskFactory.SwitchToMainThreadAsync();
59-
UpdateRepo(repo);
60-
}).Task.Forget();
40+
// Navigation items need to listen for repo change events before they're visible
41+
SubscribeToRepoChanges();
6142
}
6243

6344
public override async void Invalidate()
@@ -73,13 +54,6 @@ void OnThemeChanged()
7354
Icon = SharedResources.GetDrawingForIcon(octicon, dark ? Colors.DarkThemeNavigationItem : Colors.LightThemeNavigationItem, theme);
7455
}
7556

76-
void UpdateRepo(LocalRepositoryModel repo)
77-
{
78-
ActiveRepo = repo;
79-
RepoChanged();
80-
Invalidate();
81-
}
82-
8357
protected void OpenInBrowser(Lazy<IVisualStudioBrowser> browser, string endpoint)
8458
{
8559
var uri = ActiveRepoUri;
@@ -93,25 +67,6 @@ protected void OpenInBrowser(Lazy<IVisualStudioBrowser> browser, string endpoint
9367
OpenInBrowser(browser, browseUrl);
9468
}
9569

96-
void Unsubscribe()
97-
{
98-
holder.TeamExplorerContext.PropertyChanged -= TeamExplorerContext_PropertyChanged;
99-
}
100-
101-
bool disposed;
102-
protected override void Dispose(bool disposing)
103-
{
104-
if (disposing)
105-
{
106-
if (!disposed)
107-
{
108-
Unsubscribe();
109-
disposed = true;
110-
}
111-
}
112-
base.Dispose(disposing);
113-
}
114-
11570
int argbColor;
11671
public int ArgbColor
11772
{

src/GitHub.VisualStudio.UI/Base/TeamExplorerItemBase.cs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,19 @@ public ISimpleApiClient SimpleApiClient
3030
}
3131
}
3232

33-
public TeamExplorerItemBase(IGitHubServiceProvider serviceProvider, ITeamExplorerServiceHolder holder)
34-
: base(serviceProvider)
33+
public TeamExplorerItemBase(IGitHubServiceProvider serviceProvider, ISimpleApiClientFactory apiFactory,
34+
ITeamExplorerServiceHolder holder) : this(serviceProvider, holder)
3535
{
36-
Guard.ArgumentNotNull(serviceProvider, nameof(serviceProvider));
37-
Guard.ArgumentNotNull(holder, nameof(holder));
36+
Guard.ArgumentNotNull(apiFactory, nameof(apiFactory));
3837

39-
this.holder = holder;
38+
this.apiFactory = apiFactory;
4039
}
4140

42-
public TeamExplorerItemBase(IGitHubServiceProvider serviceProvider,
43-
ISimpleApiClientFactory apiFactory, ITeamExplorerServiceHolder holder)
41+
public TeamExplorerItemBase(IGitHubServiceProvider serviceProvider, ITeamExplorerServiceHolder holder)
4442
: base(serviceProvider)
4543
{
46-
Guard.ArgumentNotNull(serviceProvider, nameof(serviceProvider));
47-
Guard.ArgumentNotNull(apiFactory, nameof(apiFactory));
4844
Guard.ArgumentNotNull(holder, nameof(holder));
4945

50-
this.apiFactory = apiFactory;
5146
this.holder = holder;
5247
}
5348

@@ -63,7 +58,6 @@ public virtual void Initialize(IServiceProvider serviceProvider)
6358
SubscribeToRepoChanges();
6459
}
6560

66-
6761
public virtual void Execute()
6862
{
6963
}
@@ -72,10 +66,15 @@ public virtual void Invalidate()
7266
{
7367
}
7468

75-
void SubscribeToRepoChanges()
69+
bool subscribedToRepoChanges = false;
70+
protected void SubscribeToRepoChanges()
7671
{
77-
UpdateRepo(holder.TeamExplorerContext.ActiveRepository);
78-
holder.TeamExplorerContext.PropertyChanged += TeamExplorerContext_PropertyChanged;
72+
if (!subscribedToRepoChanges)
73+
{
74+
subscribedToRepoChanges = true;
75+
UpdateRepoOnMainThread(holder.TeamExplorerContext.ActiveRepository);
76+
holder.TeamExplorerContext.PropertyChanged += TeamExplorerContext_PropertyChanged;
77+
}
7978
}
8079

8180
void TeamExplorerContext_PropertyChanged(object sender, PropertyChangedEventArgs e)

0 commit comments

Comments
 (0)