示例#1
0
        public void ScanPackageDirectoryReturnsPackageForValidDirectory()
        {
            var pkgDir = Path.Combine(PackagesDirectory, "Custom Rounding");
            var loader = ViewModel.Model.PackageLoader;
            var pkg    = loader.ScanPackageDirectory(pkgDir);

            Assert.IsNotNull(pkg);
            Assert.AreEqual("CAAD_RWTH", pkg.Group);
            Assert.AreEqual("Custom Rounding", pkg.Name);
            Assert.AreEqual("0.1.4", pkg.VersionName);
            Assert.AreEqual("This collection of nodes allows rounding, rounding up and rounding down to a specified precision.", pkg.Description);
            Assert.AreEqual("Round Up To Precision - Rounds a number *up* to a specified precision, Round Down To Precision - "
                            + "Rounds a number *down* to a specified precision, Round To Precision - Rounds a number to a specified precision", pkg.Contents);
            Assert.AreEqual("0.5.2.10107", pkg.EngineVersion);

            var loadPackageParams = new LoadPackageParams
            {
                Loader            = ViewModel.Model.Loader,
                LibraryServices   = ViewModel.Model.EngineController.LibraryServices,
                Context           = ViewModel.Model.Context,
                IsTestMode        = true,
                CustomNodeManager = ViewModel.Model.CustomNodeManager
            };

            pkg.LoadIntoDynamo(loadPackageParams, ViewModel.Model.Logger);

            Assert.AreEqual(3, pkg.LoadedCustomNodes.Count);
        }
示例#2
0
        public void DisablingCustomPackagePathsCorrectlyDisablesLoading()
        {
            //setup clean loader where std lib is a custom package path
            var loader   = new PackageLoader(new[] { StandardLibraryTestDirectory }, string.Empty);
            var settings = new PreferenceSettings();

            //disable custom package paths
            settings.DisableCustomPackageLocations = true;
            settings.CustomPackageFolders          = new List <string>()
            {
                StandardLibraryTestDirectory
            };
            var loaderParams = new LoadPackageParams()
            {
                PathManager = CurrentDynamoModel.PathManager,
                Preferences = settings
            };

            //invoke the load
            loader.LoadAll(loaderParams);

            //assert the package in the custom package path was not loaded
            Assert.IsFalse(loader.LocalPackages.Any(x => x.BinaryDirectory.Contains("SignedPackage2")));
            Assert.AreEqual(0, loader.LocalPackages.Count());
        }
示例#3
0
 public PackagePathViewModel(PackageLoader loader, LoadPackageParams loadParams, CustomNodeManager customNodeManager)
 {
     this.packageLoader     = loader;
     this.loadPackageParams = loadParams;
     this.customNodeManager = customNodeManager;
     InitializeRootLocations();
     InitializeCommands();
 }
示例#4
0
 private PackagePathViewModel CreatePackagePathViewModel(PreferenceSettings setting)
 {
     PackageLoader loader = new PackageLoader(setting.CustomPackageFolders);
     LoadPackageParams loadParams = new LoadPackageParams
     {
         Preferences = setting,
         PathManager = Model.PathManager
     };
     CustomNodeManager customNodeManager = Model.CustomNodeManager;
     return new PackagePathViewModel(loader, loadParams, customNodeManager);
 }
示例#5
0
        public void IfPathsAreUnchangedPackagesAreNotReloaded()
        {
            var count   = 0;
            var setting = new PreferenceSettings()
            {
                CustomPackageFolders = { @"Z:\" }
            };
            var pathManager = new Mock <IPathManager>();

            pathManager.SetupGet(x => x.PackagesDirectories).Returns(
                () => setting.CustomPackageFolders);

            PackageLoader loader = new PackageLoader(pathManager.Object);

            loader.PackagesLoaded += Loader_PackagesLoaded;

            LoadPackageParams loadParams = new LoadPackageParams
            {
                Preferences = setting,
            };
            CustomNodeManager customNodeManager = Model.CustomNodeManager;
            var vm = new PackagePathViewModel(loader, loadParams, customNodeManager);

            vm.SaveSettingCommand.Execute(null);

            //should not have reloaded anything.
            Assert.AreEqual(0, count);
            var path = string.Empty;

            vm.RequestShowFileDialog += (sender, args) => { args.Path = path; };
            path = Path.Combine(GetTestDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)), "pkgs");
            //add the new path
            vm.AddPathCommand.Execute(null);

            //save the new path
            vm.SaveSettingCommand.Execute(null);

            //should have loaded something.
            Assert.AreEqual(10, count);

            //commit the paths again.
            vm.SaveSettingCommand.Execute(null);

            //should not have loaded anything.
            Assert.AreEqual(10, count);

            void Loader_PackagesLoaded(System.Collections.Generic.IEnumerable <Assembly> obj)
            {
                count = count + obj.Count();
            }

            loader.PackagesLoaded -= Loader_PackagesLoaded;
        }
示例#6
0
        public PackagePathViewModel(PackageLoader loader, LoadPackageParams loadParams, CustomNodeManager customNodeManager)
        {
            this.packageLoader     = loader;
            this.loadPackageParams = loadParams;
            this.customNodeManager = customNodeManager;
            RootLocations          = new ObservableCollection <string>(setting.CustomPackageFolders);

            AddPathCommand      = new DelegateCommand(p => InsertPath());
            DeletePathCommand   = new DelegateCommand(p => RemovePathAt((int)p), CanDelete);
            MovePathUpCommand   = new DelegateCommand(p => SwapPath((int)p, ((int)p) - 1), CanMoveUp);
            MovePathDownCommand = new DelegateCommand(p => SwapPath((int)p, ((int)p) + 1), CanMoveDown);
            UpdatePathCommand   = new DelegateCommand(p => UpdatePathAt((int)p));
            SaveSettingCommand  = new DelegateCommand(CommitChanges);

            SelectedIndex = 0;
        }
示例#7
0
        private PackagePathViewModel CreatePackagePathViewModel(PreferenceSettings setting)
        {
            var pathManager = new Mock <IPathManager>();

            pathManager.SetupGet(x => x.PackagesDirectories).Returns(
                () => setting.CustomPackageFolders);

            PackageLoader loader = new PackageLoader(pathManager.Object);

            LoadPackageParams loadParams = new LoadPackageParams
            {
                Preferences = setting,
            };
            CustomNodeManager customNodeManager = Model.CustomNodeManager;

            return(new PackagePathViewModel(loader, loadParams, customNodeManager));
        }
示例#8
0
        private PackagePathViewModel CreatePackagePathViewModel(PreferenceSettings settings)
        {
            var pathManager = new PathManager(new PathManagerParams {
            })
            {
                Preferences = settings
            };

            PackageLoader loader = new PackageLoader(pathManager);

            LoadPackageParams loadParams = new LoadPackageParams
            {
                Preferences = settings,
            };
            CustomNodeManager customNodeManager = Model.CustomNodeManager;

            return(new PackagePathViewModel(loader, loadParams, customNodeManager));
        }
示例#9
0
        public void PackageInStandardLibLocationIsLoaded()
        {
            //setup clean loader
            var loader   = new PackageLoader(new string[0], StandardLibraryTestDirectory);
            var settings = new PreferenceSettings();

            settings.DisableStandardLibrary = false;

            var loaderParams = new LoadPackageParams()
            {
                PathManager = CurrentDynamoModel.PathManager,
                Preferences = settings
            };

            //invoke the load
            loader.LoadAll(loaderParams);

            //assert the package in std lib was loaded.
            Assert.IsTrue(loader.LocalPackages.Any(x => x.BinaryDirectory.Contains("SignedPackage2")));
            Assert.AreEqual(1, loader.LocalPackages.Count());
        }
示例#10
0
        public void DisablingStandardLibraryCorrectlyDisablesLoading()
        {
            //setup clean loader
            var loader   = new PackageLoader(new string[0], StandardLibraryTestDirectory);
            var settings = new PreferenceSettings();

            settings.DisableStandardLibrary = true;

            var loaderParams = new LoadPackageParams()
            {
                PathManager = CurrentDynamoModel.PathManager,
                Preferences = settings
            };

            //then invoke load

            loader.LoadAll(loaderParams);

            //assert the package in std lib was not loaded.
            Assert.IsFalse(loader.LocalPackages.Any(x => x.Name.Contains("SignedPackage2")));
            Assert.AreEqual(0, loader.LocalPackages.Count());
        }
示例#11
0
        /// <summary>
        /// The PreferencesViewModel constructor basically initialize all the ItemsSource for the corresponding ComboBox in the View (PreferencesView.xaml)
        /// </summary>
        public PreferencesViewModel(DynamoViewModel dynamoViewModel)
        {
            this.preferenceSettings            = dynamoViewModel.PreferenceSettings;
            this.pythonScriptEditorTextOptions = dynamoViewModel.PythonScriptEditorTextOptions;
            this.runPreviewEnabled             = dynamoViewModel.HomeSpaceViewModel.RunSettingsViewModel.RunButtonEnabled;
            this.homeSpace                  = dynamoViewModel.HomeSpace;
            this.dynamoViewModel            = dynamoViewModel;
            this.installedPackagesViewModel = new InstalledPackagesViewModel(dynamoViewModel,
                                                                             dynamoViewModel.PackageManagerClientViewModel.PackageManagerExtension.PackageLoader);

            // Scan for engines
            AddPythonEnginesOptions();

            PythonEngineManager.Instance.AvailableEngines.CollectionChanged += PythonEnginesChanged;

            //Sets SelectedPythonEngine.
            //If the setting is empty it corresponds to the default python engine
            var engine = PythonEnginesList.FirstOrDefault(x => x.Equals(preferenceSettings.DefaultPythonEngine));

            SelectedPythonEngine = string.IsNullOrEmpty(engine) ? Res.DefaultPythonEngineNone : preferenceSettings.DefaultPythonEngine;

            string languages = Wpf.Properties.Resources.PreferencesWindowLanguages;

            LanguagesList    = new ObservableCollection <string>(languages.Split(','));
            SelectedLanguage = languages.Split(',').First();

            FontSizeList = new ObservableCollection <string>();
            FontSizeList.Add(Wpf.Properties.Resources.ScalingSmallButton);
            FontSizeList.Add(Wpf.Properties.Resources.ScalingMediumButton);
            FontSizeList.Add(Wpf.Properties.Resources.ScalingLargeButton);
            FontSizeList.Add(Wpf.Properties.Resources.ScalingExtraLargeButton);
            SelectedFontSize = Wpf.Properties.Resources.ScalingMediumButton;

            NumberFormatList = new ObservableCollection <string>();
            NumberFormatList.Add(Wpf.Properties.Resources.DynamoViewSettingMenuNumber0);
            NumberFormatList.Add(Wpf.Properties.Resources.DynamoViewSettingMenuNumber00);
            NumberFormatList.Add(Wpf.Properties.Resources.DynamoViewSettingMenuNumber000);
            NumberFormatList.Add(Wpf.Properties.Resources.DynamoViewSettingMenuNumber0000);
            NumberFormatList.Add(Wpf.Properties.Resources.DynamoViewSettingMenuNumber00000);
            SelectedNumberFormat = preferenceSettings.NumberFormat;

            runSettingsIsChecked = preferenceSettings.DefaultRunType;
            RunPreviewIsChecked  = preferenceSettings.ShowRunPreview;

            //By Default the warning state of the Visual Settings tab (Group Styles section) will be disabled
            isWarningEnabled = false;

            StyleItemsList = LoadStyles(preferenceSettings.GroupStyleItemsList);

            //When pressing the "Add Style" button some controls will be shown with some values by default so later they can be populated by the user
            AddStyleControl = new StyleItem()
            {
                GroupName = "", HexColorString = "#" + GetRandomHexStringColor()
            };

            //This piece of code will populate all the description text for the RadioButtons in the Geometry Scaling section.
            optionsGeometryScale = new GeometryScalingOptions();

            UpdateGeoScaleRadioButtonSelected(dynamoViewModel.ScaleFactorLog);

            optionsGeometryScale.DescriptionScaleRange = new ObservableCollection <string>();
            optionsGeometryScale.DescriptionScaleRange.Add(string.Format(Res.ChangeScaleFactorPromptDescriptionContent, scaleRanges[GeometryScaleSize.Small].Item2,
                                                                         scaleRanges[GeometryScaleSize.Small].Item3));
            optionsGeometryScale.DescriptionScaleRange.Add(string.Format(Res.ChangeScaleFactorPromptDescriptionContent, scaleRanges[GeometryScaleSize.Medium].Item2,
                                                                         scaleRanges[GeometryScaleSize.Medium].Item3));
            optionsGeometryScale.DescriptionScaleRange.Add(string.Format(Res.ChangeScaleFactorPromptDescriptionContent, scaleRanges[GeometryScaleSize.Large].Item2,
                                                                         scaleRanges[GeometryScaleSize.Large].Item3));
            optionsGeometryScale.DescriptionScaleRange.Add(string.Format(Res.ChangeScaleFactorPromptDescriptionContent, scaleRanges[GeometryScaleSize.ExtraLarge].Item2,
                                                                         scaleRanges[GeometryScaleSize.ExtraLarge].Item3));

            SavedChangesLabel   = string.Empty;
            SavedChangesTooltip = string.Empty;

            preferencesTabs = new Dictionary <string, TabSettings>();
            preferencesTabs.Add("General", new TabSettings()
            {
                Name = "General", ExpanderActive = string.Empty
            });
            preferencesTabs.Add("Features", new TabSettings()
            {
                Name = "Features", ExpanderActive = string.Empty
            });
            preferencesTabs.Add("VisualSettings", new TabSettings()
            {
                Name = "VisualSettings", ExpanderActive = string.Empty
            });
            preferencesTabs.Add("Package Manager", new TabSettings()
            {
                Name = "Package Manager", ExpanderActive = string.Empty
            });

            //create a packagePathsViewModel we'll use to interact with the package search paths list.
            var loadPackagesParams = new LoadPackageParams
            {
                Preferences = preferenceSettings
            };
            var customNodeManager = dynamoViewModel.Model.CustomNodeManager;
            var packageLoader     = dynamoViewModel.Model.GetPackageManagerExtension()?.PackageLoader;

            PackagePathsViewModel = new PackagePathViewModel(packageLoader, loadPackagesParams, customNodeManager);

            WorkspaceEvents.WorkspaceSettingsChanged += PreferencesViewModel_WorkspaceSettingsChanged;

            PropertyChanged += Model_PropertyChanged;
        }
        /// <summary>
        /// This method downloads the package represented by the PackageDownloadHandle,
        /// uninstalls its current installation if necessary, and installs the package.
        ///
        /// Note that, if the package is already installed, it must be uninstallable
        /// </summary>
        /// <param name="packageDownloadHandle"></param>
        internal void DownloadAndInstall(PackageDownloadHandle packageDownloadHandle)
        {
            Downloads.Add(packageDownloadHandle);

            packageDownloadHandle.DownloadState = PackageDownloadHandle.State.Downloading;

            Task.Factory.StartNew(() =>
            {
                try
                {
                    var pathDl = Model.DownloadPackage(packageDownloadHandle.Header._id,
                                                       packageDownloadHandle.VersionName);

                    DynamoViewModel.UIDispatcher.BeginInvoke((Action)(() =>
                    {
                        try
                        {
                            packageDownloadHandle.Done(pathDl);

                            Package dynPkg;

                            var firstOrDefault = DynamoViewModel.Model.PackageLoader.LocalPackages.FirstOrDefault(pkg => pkg.Name == packageDownloadHandle.Name);
                            if (firstOrDefault != null)
                            {
                                var dynModel = DynamoViewModel.Model;
                                try
                                {
                                    firstOrDefault.UninstallCore(dynModel.CustomNodeManager, dynModel.PackageLoader, dynModel.PreferenceSettings);
                                }
                                catch
                                {
                                    MessageBox.Show(String.Format(Resources.MessageFailToUninstallPackage, packageDownloadHandle.Name),
                                                    Resources.UninstallFailureMessageBoxTitle,
                                                    MessageBoxButton.OK, MessageBoxImage.Error);
                                }
                            }

                            if (packageDownloadHandle.Extract(DynamoViewModel.Model, out dynPkg))
                            {
                                var downloadPkg = Package.FromDirectory(dynPkg.RootDirectory, DynamoViewModel.Model.Logger);

                                var loader = DynamoViewModel.Model.Loader;
                                var logger = DynamoViewModel.Model.Logger;
                                var libraryServices = DynamoViewModel.EngineController.LibraryServices;

                                var loadPackageParams = new LoadPackageParams
                                {
                                    Loader = loader,
                                    LibraryServices = libraryServices,
                                    Context = DynamoViewModel.Model.Context,
                                    IsTestMode = DynamoModel.IsTestMode,
                                    CustomNodeManager = DynamoViewModel.Model.CustomNodeManager
                                };

                                downloadPkg.LoadIntoDynamo(loadPackageParams, logger);

                                DynamoViewModel.Model.PackageLoader.LocalPackages.Add(downloadPkg);
                                packageDownloadHandle.DownloadState = PackageDownloadHandle.State.Installed;
                            }
                        }
                        catch (Exception e)
                        {
                            packageDownloadHandle.Error(e.Message);
                        }
                    }));
                }
                catch (Exception e)
                {
                    packageDownloadHandle.Error(e.Message);
                }
            });
        }