Пример #1
0
        public void TestViewPackageDetailsCommand()
        {
            // Arrange
            string      packageToOpen = "Sample View Extension";
            List <User> packageAuthor = new List <User> {
                new User {
                    _id = "1", username = "******"
                }
            };
            string packageDescription = "Dynamo sample view extension.";

            PackageDetailsViewExtension.PackageManagerClientViewModel = ViewModel.PackageManagerClientViewModel;

            PackageHeader packageHeader = new PackageHeader
            {
                _id      = null,
                name     = packageToOpen,
                versions = PackageVersions,
                latest_version_update = System.DateTime.Now,
                num_versions          = PackageVersions.Count,
                comments          = null,
                num_comments      = 0,
                latest_comment    = null,
                votes             = 0,
                downloads         = 0,
                repository_url    = null,
                site_url          = null,
                banned            = false,
                deprecated        = false,
                @group            = null,
                engine            = null,
                license           = null,
                used_by           = null,
                host_dependencies = Hosts,
                num_dependents    = 0,
                description       = packageDescription,
                maintainers       = packageAuthor,
                keywords          = null
            };
            PackageManagerSearchElement packageManagerSearchElement = new PackageManagerSearchElement(packageHeader);

            PackageDetailsViewExtension.OpenPackageDetails(packageManagerSearchElement);
            PackageDetailsView packageDetailsView = PackageDetailsViewExtension.PackageDetailsView;

            Assert.IsInstanceOf <PackageDetailsViewModel>(packageDetailsView.DataContext);
            PackageDetailsViewModel packageDetailsViewModel = packageDetailsView.DataContext as PackageDetailsViewModel;

            // Act
            PackageDetailsViewExtension.PackageManagerClientViewModel
            .DynamoViewModel
            .OnViewExtensionOpenWithParameterRequest("Package Details", packageManagerSearchElement);

            // Assert
            Assert.AreEqual(packageToOpen, packageDetailsViewModel.PackageName);
            Assert.AreEqual(packageAuthor.First().username, packageDetailsViewModel.PackageAuthorName);
            Assert.AreEqual(packageDescription, packageDetailsViewModel.PackageDescription);
        }
Пример #2
0
        /// <summary>
        ///     Adds a PackageHeader, recently downloaded from the Package Manager, to Search
        /// </summary>
        /// <param name="packageHeader">A PackageHeader object</param>
        public void Add(PackageHeader packageHeader)
        {
            var searchEle = new PackageManagerSearchElement(packageHeader);

            SearchDictionary.Add(searchEle, searchEle.Name);
            if (packageHeader.keywords != null && packageHeader.keywords.Count > 0)
            {
                SearchDictionary.Add(searchEle, packageHeader.keywords);
            }
            SearchDictionary.Add(searchEle, searchEle.Description);
        }
Пример #3
0
        public void TestOpenDependencyDetails()
        {
            // Arrange
            string packageToOpen      = "Sample View Extension";
            string packageAuthor      = "DynamoTeam";
            string packageDescription = "Dynamo sample view extension.";

            PackageDetailsViewExtension.PackageManagerClientViewModel = ViewModel.PackageManagerClientViewModel;

            PackageHeader packageHeader = new PackageHeader
            {
                _id      = null,
                name     = string.Empty,
                versions = PackageVersions,
                latest_version_update = System.DateTime.Now,
                num_versions          = PackageVersions.Count,
                comments          = null,
                num_comments      = 0,
                latest_comment    = null,
                votes             = 0,
                downloads         = 0,
                repository_url    = null,
                site_url          = null,
                banned            = false,
                deprecated        = false,
                @group            = null,
                engine            = null,
                license           = null,
                used_by           = null,
                host_dependencies = Hosts,
                num_dependents    = 0,
                description       = null,
                maintainers       = UsersList,
                keywords          = null
            };
            PackageManagerSearchElement packageManagerSearchElement = new PackageManagerSearchElement(packageHeader);

            PackageDetailsViewExtension.OpenPackageDetails(packageManagerSearchElement);
            PackageDetailsView packageDetailsView = PackageDetailsViewExtension.PackageDetailsView;

            Assert.IsInstanceOf <PackageDetailsViewModel>(packageDetailsView.DataContext);
            PackageDetailsViewModel packageDetailsViewModel = packageDetailsView.DataContext as PackageDetailsViewModel;

            // Act
            packageDetailsViewModel.OpenDependencyDetails(packageToOpen);

            // Assert
            PackageDetailsView      newPackageDetailsView      = PackageDetailsViewExtension.PackageDetailsView;
            PackageDetailsViewModel newPackageDetailsViewModel = newPackageDetailsView.DataContext as PackageDetailsViewModel;

            Assert.AreEqual(packageToOpen, newPackageDetailsViewModel.PackageName);
            Assert.AreEqual(packageAuthor, newPackageDetailsViewModel.PackageAuthorName);
            Assert.AreEqual(packageDescription, newPackageDetailsViewModel.PackageDescription);
        }
Пример #4
0
        internal void OpenPackageDetails(PackageManagerSearchElement packageManagerSearchElement)
        {
            PackageDetailsViewModel = new PackageDetailsViewModel(this, packageManagerSearchElement);

            if (PackageDetailsView == null)
            {
                PackageDetailsView = new PackageDetailsView();
            }
            PackageDetailsView.DataContext = PackageDetailsViewModel;

            ViewLoadedParamsReference?.AddToExtensionsSideBar(this, PackageDetailsView);
        }
        public PackageManagerSearchElementViewModel(PackageManagerSearchElement element, bool canLogin) : base(element)
        {
            this.Model = element;

            this.ToggleIsExpandedCommand = new DelegateCommand(() => this.Model.IsExpanded = !this.Model.IsExpanded);
            this.DownloadLatestCommand   = new DelegateCommand(() => OnRequestDownload(Model.Header.versions.Last()));
            this.UpvoteCommand           = new DelegateCommand(Model.Upvote, () => canLogin);
            this.DownvoteCommand         = new DelegateCommand(Model.Downvote, () => canLogin);
            this.VisitSiteCommand        =
                new DelegateCommand(() => GoToUrl(FormatUrl(Model.SiteUrl)), () => !String.IsNullOrEmpty(Model.SiteUrl));
            this.VisitRepositoryCommand =
                new DelegateCommand(() => GoToUrl(FormatUrl(Model.RepositoryUrl)), () => !String.IsNullOrEmpty(Model.RepositoryUrl));
        }
        public PackageManagerSearchElementViewModel(PackageManagerSearchElement element, bool canLogin) : base(element)
        {
            this.Model = element;

            this.ToggleIsExpandedCommand = new DelegateCommand(() => this.Model.IsExpanded = !this.Model.IsExpanded );
            this.DownloadLatestCommand = new DelegateCommand(() => OnRequestDownload(Model.Header.versions.Last()));
            this.UpvoteCommand = new DelegateCommand(Model.Upvote, () => canLogin);
            this.DownvoteCommand = new DelegateCommand(Model.Downvote, () => canLogin);
            this.VisitSiteCommand =
                new DelegateCommand(() => GoToUrl(FormatUrl(Model.SiteUrl)), () => !String.IsNullOrEmpty(Model.SiteUrl));
            this.VisitRepositoryCommand =
                new DelegateCommand(() => GoToUrl(FormatUrl(Model.RepositoryUrl)), () => !String.IsNullOrEmpty(Model.RepositoryUrl));
        }
Пример #7
0
        public List <PackageManagerSearchElement> ListAll()
        {
            CachedPackageList = new List <PackageManagerSearchElement>();

            foreach (var header in Model.ListAll())
            {
                var ele = new PackageManagerSearchElement(header);

                ele.UpvoteRequested += this.Model.Upvote;
                CachedPackageList.Add(ele);
            }

            return(CachedPackageList);
        }
Пример #8
0
        public void TestNodeModelSearchElement()
        {
            //Arrange
            var searchElement = new PackageManagerSearchElement(new PackageHeader()
            {
                name = "Foo"
            });

            searchElement.Executed += SearchElement_Executed; //Subscribe the function to the Executed event

            //Act
            searchElement.Execute();

            //Assert
            Assert.AreEqual(searchElement.CreationName, "Foo"); //This will execute the Get method of the CreationName property
            Assert.IsTrue(bExecuted);                           //This just validates that the Execute event was raised
        }
Пример #9
0
        public PackageManagerSearchElementViewModel(PackageManagerSearchElement element, bool canLogin) : base(element)
        {
            this.Model = element;

            this.ToggleIsExpandedCommand = new DelegateCommand(() => this.Model.IsExpanded = !this.Model.IsExpanded);

            this.DownloadLatestCommand             = new DelegateCommand(() => OnRequestDownload(Model.Header.versions.Last(), false));
            this.DownloadLatestToCustomPathCommand = new DelegateCommand(() => OnRequestDownload(Model.Header.versions.Last(), true));

            this.UpvoteCommand = new DelegateCommand(Model.Upvote, () => canLogin);

            // TODO: Remove the initialization of the UI command in Dynamo 3.0
            this.DownvoteCommand = new DelegateCommand(Model.Downvote, () => canLogin);

            this.VisitSiteCommand =
                new DelegateCommand(() => GoToUrl(FormatUrl(Model.SiteUrl)), () => !String.IsNullOrEmpty(Model.SiteUrl));
            this.VisitRepositoryCommand =
                new DelegateCommand(() => GoToUrl(FormatUrl(Model.RepositoryUrl)), () => !String.IsNullOrEmpty(Model.RepositoryUrl));
        }
Пример #10
0
        public void TestVersionsDisplayedInView()
        {
            // Arrange
            PackageHeader packageHeader = new PackageHeader {
                _id      = null,
                name     = string.Empty,
                versions = PackageVersions,
                latest_version_update = System.DateTime.Now,
                num_versions          = PackageVersions.Count,
                comments          = null,
                num_comments      = 0,
                latest_comment    = null,
                votes             = 0,
                downloads         = 0,
                repository_url    = null,
                site_url          = null,
                banned            = false,
                deprecated        = false,
                @group            = null,
                engine            = null,
                license           = null,
                used_by           = null,
                host_dependencies = Hosts,
                num_dependents    = 0,
                description       = null,
                maintainers       = UsersList,
                keywords          = null
            };
            PackageManagerSearchElement packageManagerSearchElement = new PackageManagerSearchElement(packageHeader);

            // Act
            PackageDetailsViewExtension.OpenPackageDetails(packageManagerSearchElement);
            PackageDetailsView packageDetailsView = PackageDetailsViewExtension.PackageDetailsView;

            // Assert
            Assert.IsNotNull(packageDetailsView.VersionsDataGrid);
            Assert.IsInstanceOf <PackageDetailsViewModel>(packageDetailsView.DataContext);

            PackageDetailsViewModel packageDetailsViewModel = packageDetailsView.DataContext as PackageDetailsViewModel;

            Assert.AreEqual(PackageVersions.Count, packageDetailsViewModel.PackageDetailItems.Count);
        }
Пример #11
0
 /// <summary>
 ///     Adds a PackageHeader, recently downloaded from the Package Manager, to Search
 /// </summary>
 /// <param name="packageHeader">A PackageHeader object</param>
 public void Add(PackageHeader packageHeader)
 {
     var searchEle = new PackageManagerSearchElement(packageHeader);
     SearchDictionary.Add(searchEle, searchEle.Name);
     if (packageHeader.keywords != null && packageHeader.keywords.Count > 0)
         SearchDictionary.Add(searchEle, packageHeader.keywords);
     SearchDictionary.Add(searchEle, searchEle.Description);
     SearchAndUpdateResultsSync(SearchText);
 }
Пример #12
0
        internal void ExecutePackageDownload(string name, PackageVersion version, string downloadPath)
        {
            string msg = String.IsNullOrEmpty(downloadPath) ?
                         String.Format(Resources.MessageConfirmToInstallPackage, name, version.version) :
                         String.Format(Resources.MessageConfirmToInstallPackageToFolder, name, version.version, downloadPath);

            var result = MessageBox.Show(msg,
                                         Resources.PackageDownloadConfirmMessageBoxTitle,
                                         MessageBoxButton.OKCancel, MessageBoxImage.Question);

            var pmExt = DynamoViewModel.Model.GetPackageManagerExtension();

            if (result == MessageBoxResult.OK)
            {
                // get all of the headers
                var headers = version.full_dependency_ids.Select(dep => dep._id).Select((id) =>
                {
                    PackageHeader pkgHeader;
                    var res = Model.DownloadPackageHeader(id, out pkgHeader);

                    if (!res.Success)
                    {
                        MessageBox.Show(String.Format(Resources.MessageFailedToDownloadPackage, id),
                                        Resources.PackageDownloadErrorMessageBoxTitle,
                                        MessageBoxButton.OK, MessageBoxImage.Error);
                    }

                    return(pkgHeader);
                }).ToList();

                // if any header download fails, abort
                if (headers.Any(x => x == null))
                {
                    return;
                }

                var allPackageVersions = PackageManagerSearchElement.ListRequiredPackageVersions(headers, version);

                // determine if any of the packages contain binaries or python scripts.
                var containsBinaries =
                    allPackageVersions.Any(
                        x => x.Item2.contents.Contains(PackageManagerClient.PackageContainsBinariesConstant) || x.Item2.contains_binaries);

                var containsPythonScripts =
                    allPackageVersions.Any(
                        x => x.Item2.contents.Contains(PackageManagerClient.PackageContainsPythonScriptsConstant));

                // if any do, notify user and allow cancellation
                if (containsBinaries || containsPythonScripts)
                {
                    var res = MessageBox.Show(Resources.MessagePackageContainPythonScript,
                                              Resources.PackageDownloadMessageBoxTitle,
                                              MessageBoxButton.OKCancel, MessageBoxImage.Exclamation);

                    if (res == MessageBoxResult.Cancel)
                    {
                        return;
                    }
                }

                // Determine if there are any dependencies that are made with a newer version
                // of Dynamo (this includes the root package)
                var dynamoVersion       = DynamoViewModel.Model.Version;
                var dynamoVersionParsed = VersionUtilities.PartialParse(dynamoVersion, 3);
                var futureDeps          = allPackageVersions.FilterFuturePackages(dynamoVersionParsed);

                // If any of the required packages use a newer version of Dynamo, show a dialog to the user
                // allowing them to cancel the package download
                if (futureDeps.Any())
                {
                    var versionList = FormatPackageVersionList(futureDeps);

                    if (MessageBox.Show(String.Format(Resources.MessagePackageNewerDynamo,
                                                      DynamoViewModel.BrandingResourceProvider.ProductName,
                                                      versionList),
                                        string.Format(Resources.PackageUseNewerDynamoMessageBoxTitle,
                                                      DynamoViewModel.BrandingResourceProvider.ProductName),
                                        MessageBoxButton.OKCancel,
                                        MessageBoxImage.Warning) == MessageBoxResult.Cancel)
                    {
                        return;
                    }
                }

                var localPkgs = pmExt.PackageLoader.LocalPackages;

                var uninstallsRequiringRestart          = new List <Package>();
                var uninstallRequiringUserModifications = new List <Package>();
                var immediateUninstalls = new List <Package>();

                // if a package is already installed we need to uninstall it, allowing
                // the user to cancel if they do not want to uninstall the package
                foreach (var localPkg in headers.Select(x => localPkgs.FirstOrDefault(v => v.Name == x.name)))
                {
                    if (localPkg == null)
                    {
                        continue;
                    }

                    if (localPkg.LoadedAssemblies.Any())
                    {
                        uninstallsRequiringRestart.Add(localPkg);
                        continue;
                    }

                    if (localPkg.InUse(DynamoViewModel.Model))
                    {
                        uninstallRequiringUserModifications.Add(localPkg);
                        continue;
                    }

                    immediateUninstalls.Add(localPkg);
                }

                if (uninstallRequiringUserModifications.Any())
                {
                    MessageBox.Show(String.Format(Resources.MessageUninstallToContinue,
                                                  DynamoViewModel.BrandingResourceProvider.ProductName,
                                                  JoinPackageNames(uninstallRequiringUserModifications)),
                                    Resources.CannotDownloadPackageMessageBoxTitle,
                                    MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                var settings = DynamoViewModel.Model.PreferenceSettings;

                if (uninstallsRequiringRestart.Any())
                {
                    var message = string.Format(Resources.MessageUninstallToContinue2,
                                                DynamoViewModel.BrandingResourceProvider.ProductName,
                                                JoinPackageNames(uninstallsRequiringRestart),
                                                name + " " + version.version);
                    // different message for the case that the user is
                    // trying to install the same package/version they already have installed.
                    if (uninstallsRequiringRestart.Count == 1 &&
                        uninstallsRequiringRestart.First().Name == name &&
                        uninstallsRequiringRestart.First().VersionName == version.version)
                    {
                        message = String.Format(Resources.MessageUninstallSamePackage, name + " " + version.version);
                    }
                    var dialogResult = MessageBox.Show(message,
                                                       Resources.CannotDownloadPackageMessageBoxTitle,
                                                       MessageBoxButton.YesNo, MessageBoxImage.Error);

                    if (dialogResult == MessageBoxResult.Yes)
                    {
                        // mark for uninstallation
                        uninstallsRequiringRestart.ForEach(x => x.MarkForUninstall(settings));
                    }
                    return;
                }

                if (immediateUninstalls.Any())
                {
                    // if the package is not in use, tell the user we will be uninstall it and give them the opportunity to cancel
                    if (MessageBox.Show(String.Format(Resources.MessageAlreadyInstallDynamo,
                                                      DynamoViewModel.BrandingResourceProvider.ProductName,
                                                      JoinPackageNames(immediateUninstalls)),
                                        Resources.DownloadWarningMessageBoxTitle,
                                        MessageBoxButton.OKCancel, MessageBoxImage.Warning) == MessageBoxResult.Cancel)
                    {
                        return;
                    }
                }

                // add custom path to custom package folder list
                if (!String.IsNullOrEmpty(downloadPath))
                {
                    if (!settings.CustomPackageFolders.Contains(downloadPath))
                    {
                        settings.CustomPackageFolders.Add(downloadPath);
                    }
                }

                // form header version pairs and download and install all packages
                allPackageVersions
                .Select(x => new PackageDownloadHandle(x.Item1, x.Item2))
                .ToList()
                .ForEach(x => DownloadAndInstall(x, downloadPath));
            }
        }
Пример #13
0
 /// <summary>
 /// PackageManagerSearchElementViewModel Constructor (only used for testing in Dynamo).
 /// </summary>
 /// <param name="element">A PackageManagerSearchElement</param>
 /// <param name="canLogin">A Boolean used for access control to certain internal packages.</param>
 public PackageManagerSearchElementViewModel(PackageManagerSearchElement element, bool canLogin) : this(element, canLogin, true)
 {
 }