From 09d477f6b60e6e29f702d99db2dafb9a5a198227 Mon Sep 17 00:00:00 2001 From: Jamie Cansdale Date: Thu, 18 Oct 2018 18:39:53 +0100 Subject: [PATCH 1/3] Use CombineLatest not multiple subscriptions --- .../Services/PullRequestStatusBarManager.cs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs b/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs index c6672b2847..0f3f2e49b5 100644 --- a/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs +++ b/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs @@ -37,8 +37,6 @@ public class PullRequestStatusBarManager readonly Lazy teamExplorerContext; readonly Lazy connectionManager; - IDisposable currentSessionSubscription; - [ImportingConstructor] public PullRequestStatusBarManager( Lazy usageTracker, @@ -68,9 +66,12 @@ public void StartShowingStatus() { try { - teamExplorerContext.Value.WhenAnyValue(x => x.ActiveRepository) + var activeReposities = teamExplorerContext.Value.WhenAnyValue(x => x.ActiveRepository); + var sessions = pullRequestSessionManager.Value.WhenAnyValue(x => x.CurrentSession); + activeReposities + .CombineLatest(sessions, (r, s) => (r, s)) .ObserveOn(RxApp.MainThreadScheduler) - .Subscribe(x => RefreshActiveRepository(x)); + .Subscribe(x => RefreshCurrentSession(x.r, x.s).Forget()); } catch (Exception e) { @@ -78,13 +79,6 @@ public void StartShowingStatus() } } - void RefreshActiveRepository(ILocalRepositoryModel repository) - { - currentSessionSubscription?.Dispose(); - currentSessionSubscription = pullRequestSessionManager.Value.WhenAnyValue(x => x.CurrentSession) - .Subscribe(x => RefreshCurrentSession(repository, x).Forget()); - } - async Task RefreshCurrentSession(ILocalRepositoryModel repository, IPullRequestSession session) { try From 341877c19b321dfd5013808e2fdbc41d92e1c4e6 Mon Sep 17 00:00:00 2001 From: Jamie Cansdale Date: Thu, 18 Oct 2018 18:40:23 +0100 Subject: [PATCH 2/3] Throttle to get rid of jitter --- src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs b/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs index 0f3f2e49b5..de714e838f 100644 --- a/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs +++ b/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs @@ -70,6 +70,7 @@ public void StartShowingStatus() var sessions = pullRequestSessionManager.Value.WhenAnyValue(x => x.CurrentSession); activeReposities .CombineLatest(sessions, (r, s) => (r, s)) + .Throttle(TimeSpan.FromSeconds(1)) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(x => RefreshCurrentSession(x.r, x.s).Forget()); } From 6df00c61e53a8e9c4b64d3a624bcb1e6e33d9953 Mon Sep 17 00:00:00 2001 From: Jamie Cansdale Date: Thu, 18 Oct 2018 18:42:33 +0100 Subject: [PATCH 3/3] Use Forget to log any exceptions --- .../Services/PullRequestStatusBarManager.cs | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs b/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs index de714e838f..8bbc3ed148 100644 --- a/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs +++ b/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs @@ -72,7 +72,7 @@ public void StartShowingStatus() .CombineLatest(sessions, (r, s) => (r, s)) .Throttle(TimeSpan.FromSeconds(1)) .ObserveOn(RxApp.MainThreadScheduler) - .Subscribe(x => RefreshCurrentSession(x.r, x.s).Forget()); + .Subscribe(x => RefreshCurrentSession(x.r, x.s).Forget(log)); } catch (Exception e) { @@ -82,22 +82,15 @@ public void StartShowingStatus() async Task RefreshCurrentSession(ILocalRepositoryModel repository, IPullRequestSession session) { - try - { - var showStatus = await IsDotComOrEnterpriseRepository(repository); - if (!showStatus) - { - ShowStatus(null); - return; - } - - var viewModel = CreatePullRequestStatusViewModel(session); - ShowStatus(viewModel); - } - catch (Exception e) + var showStatus = await IsDotComOrEnterpriseRepository(repository); + if (!showStatus) { - log.Error(e, nameof(RefreshCurrentSession)); + ShowStatus(null); + return; } + + var viewModel = CreatePullRequestStatusViewModel(session); + ShowStatus(viewModel); } async Task IsDotComOrEnterpriseRepository(ILocalRepositoryModel repository)