diff --git a/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs b/src/GitHub.InlineReviews/Services/PullRequestStatusBarManager.cs index c6672b2847..8bbc3ed148 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,13 @@ 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)) + .Throttle(TimeSpan.FromSeconds(1)) .ObserveOn(RxApp.MainThreadScheduler) - .Subscribe(x => RefreshActiveRepository(x)); + .Subscribe(x => RefreshCurrentSession(x.r, x.s).Forget(log)); } catch (Exception e) { @@ -78,31 +80,17 @@ 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 - { - 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)