void OnPropertyChange(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == "IsVisible" && IsVisible && View == null) { View = new GitHubConnectContent() { DataContext = this } } ; }
void OnPropertyChange(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "IsVisible" && IsVisible && View == null) { View = new GitHubConnectContent { DataContext = this } } ; else if (e.PropertyName == "IsExpanded" && settings != null) { settings.IsExpanded = IsExpanded; } }
void OnPropertyChange(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "IsVisible" && IsVisible && View == null) { View = new GitHubConnectContent { DataContext = this } } ; } async void UpdateRepositoryList(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Add) { // if we're cloning or creating, only one repo will be added to the list // so we can handle just one new entry separately if (isCloning || isCreating) { var newrepo = e.NewItems.Cast <ISimpleRepositoryModel>().First(); SelectedRepository = newrepo; if (isCreating) { HandleCreatedRepo(newrepo); } else { HandleClonedRepo(newrepo); } var repo = await ApiFactory.Create(newrepo.CloneUrl).GetRepository(); newrepo.SetIcon(repo.Private, repo.Fork); } // looks like it's just a refresh with new stuff on the list, update the icons else { e.NewItems .Cast <ISimpleRepositoryModel>() .ForEach(async r => { if (Equals(Holder.ActiveRepo, r)) { SelectedRepository = r; } var repo = await ApiFactory.Create(r.CloneUrl).GetRepository(); r.SetIcon(repo.Private, repo.Fork); }); } } } void HandleCreatedRepo(ISimpleRepositoryModel newrepo) { var msg = string.Format(CultureInfo.CurrentUICulture, Constants.Notification_RepoCreated, newrepo.Name, newrepo.CloneUrl); msg += " " + string.Format(CultureInfo.CurrentUICulture, Constants.Notification_CreateNewProject, newrepo.LocalPath); ShowNotification(newrepo, msg); } void HandleClonedRepo(ISimpleRepositoryModel newrepo) { var msg = string.Format(CultureInfo.CurrentUICulture, Constants.Notification_RepoCloned, newrepo.Name, newrepo.CloneUrl); if (newrepo.HasCommits() && newrepo.MightContainSolution()) { msg += " " + string.Format(CultureInfo.CurrentUICulture, Constants.Notification_OpenProject, newrepo.LocalPath); } else { msg += " " + string.Format(CultureInfo.CurrentUICulture, Constants.Notification_CreateNewProject, newrepo.LocalPath); } ShowNotification(newrepo, msg); } void ShowNotification(ISimpleRepositoryModel newrepo, string msg) { var vsservices = ServiceProvider.GetExportedValue <IVSServices>(); vsservices.ClearNotifications(); vsservices.ShowMessage( msg, new RelayCommand(o => { var str = o.ToString(); /* the prefix is the action to perform: * u: launch browser with url * c: launch create new project dialog * o: launch open existing project dialog */ var prefix = str.Substring(0, 2); if (prefix == "u:") { OpenInBrowser(ServiceProvider.TryGetService <IVisualStudioBrowser>(), new Uri(str.Substring(2))); } else if (prefix == "o:") { if (ErrorHandler.Succeeded(ServiceProvider.GetSolution().OpenSolutionViaDlg(str.Substring(2), 1))) { ServiceProvider.TryGetService <ITeamExplorer>()?.NavigateToPage(new Guid(TeamExplorerPageIds.Home), null); } } else if (prefix == "c:") { vsservices.SetDefaultProjectPath(newrepo.LocalPath); if (ErrorHandler.Succeeded(ServiceProvider.GetSolution().CreateNewProjectViaDlg(null, null, 0))) { ServiceProvider.TryGetService <ITeamExplorer>()?.NavigateToPage(new Guid(TeamExplorerPageIds.Home), null); } } }) ); #if DEBUG VsOutputLogger.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0} Notification", DateTime.Now)); #endif } void RefreshRepositories() { connectionManager.RefreshRepositories(); RaisePropertyChanged("Repositories"); // trigger a re-check of the visibility of the listview based on item count }