diff --git a/src/GitHub.App/ViewModels/PullRequestDetailViewModel.cs b/src/GitHub.App/ViewModels/PullRequestDetailViewModel.cs index bd5195d51e..21e46743e1 100644 --- a/src/GitHub.App/ViewModels/PullRequestDetailViewModel.cs +++ b/src/GitHub.App/ViewModels/PullRequestDetailViewModel.cs @@ -26,7 +26,7 @@ namespace GitHub.ViewModels /// [ExportViewModel(ViewType = UIViewType.PRDetail)] [PartCreationPolicy(CreationPolicy.NonShared)] - public class PullRequestDetailViewModel : PanePageViewModelBase, IPullRequestDetailViewModel + public sealed class PullRequestDetailViewModel : PanePageViewModelBase, IPullRequestDetailViewModel, IDisposable { static readonly ILogger log = LogManager.ForContext(); @@ -34,6 +34,7 @@ public class PullRequestDetailViewModel : PanePageViewModelBase, IPullRequestDet readonly IPullRequestService pullRequestsService; readonly IPullRequestSessionManager sessionManager; readonly IUsageTracker usageTracker; + readonly IVSGitExt vsGitExt; IPullRequestModel model; string sourceBranchDisplayName; string targetBranchDisplayName; @@ -65,13 +66,22 @@ public class PullRequestDetailViewModel : PanePageViewModelBase, IPullRequestDet ITeamExplorerServiceHolder teservice, IPullRequestService pullRequestsService, IPullRequestSessionManager sessionManager, - IUsageTracker usageTracker) + IUsageTracker usageTracker, + IVSGitExt vsGitExt) : this(teservice.ActiveRepo, modelServiceFactory.CreateBlocking(connection.Get()), pullRequestsService, sessionManager, usageTracker) { + this.vsGitExt = vsGitExt; + + vsGitExt.ActiveRepositoriesChanged += Refresh; + } + + public void Dispose() + { + vsGitExt.ActiveRepositoriesChanged -= Refresh; } /// @@ -502,6 +512,18 @@ public string GetLocalFilePath(IPullRequestFileNode file) return Path.Combine(LocalRepository.LocalPath, file.DirectoryPath, file.FileName); } + async void Refresh() + { + try + { + await Load(RemoteRepositoryOwner, Model); + } + catch (Exception e) + { + log.Error(e, "Error refreshing model"); + } + } + void SubscribeOperationError(ReactiveCommand command) { command.ThrownExceptions.Subscribe(x => OperationError = x.Message);