示例#1
0
 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
        }