/// <summary> /// This method downloads the package represented by the PackageDownloadHandle, /// /// </summary> /// <param name="packageDownloadHandle">package download handle</param> internal virtual Task <(PackageDownloadHandle handle, string downloadPath)> Download(PackageDownloadHandle packageDownloadHandle) { // We only want to display the last 3 downloaded packages to the user // in the form of toast notifications. // We remove all but the last 2 packages and add the most recently-downloaded package if (Downloads.Count > 2) { Downloads.RemoveRange(index: 0, count: Downloads.Count - 2); } Downloads.Add(packageDownloadHandle); packageDownloadHandle.DownloadState = PackageDownloadHandle.State.Downloading; return(Task.Factory.StartNew(() => { // Attempt to download package string pathDl; var res = Model.DownloadPackage(packageDownloadHandle.Id, packageDownloadHandle.VersionName, out pathDl); // if you fail, update download handle and return if (!res.Success) { packageDownloadHandle.Error(res.Error); pathDl = string.Empty; } return (handle: packageDownloadHandle, downloadPath: pathDl); })); }
/// <summary> /// Check Dynamo package install state /// </summary> /// <param name="packageDownloadHandle">package download handle</param> /// <param name="downloadPath">package download path</param> internal void SetPackageState(PackageDownloadHandle packageDownloadHandle, string downloadPath) { Package dynPkg; if (packageDownloadHandle.Extract(DynamoViewModel.Model, downloadPath, out dynPkg)) { PackageManagerExtension.PackageLoader.LoadPackages(new List <Package> { dynPkg }); packageDownloadHandle.DownloadState = PackageDownloadHandle.State.Installed; } else { packageDownloadHandle.DownloadState = PackageDownloadHandle.State.Error; packageDownloadHandle.Error(Resources.MessageInvalidPackage); } }
internal virtual void InstallPackage(PackageDownloadHandle packageDownloadHandle, string downloadPath, string installPath) { // if success, proceed to install the package if (string.IsNullOrEmpty(downloadPath) || packageDownloadHandle.DownloadState == PackageDownloadHandle.State.Error) { return; } DynamoViewModel.UIDispatcher.BeginInvoke((Action)(() => { try { packageDownloadHandle.Done(downloadPath); var firstOrDefault = PackageManagerExtension.PackageLoader.LocalPackages.FirstOrDefault(pkg => pkg.Name == packageDownloadHandle.Name); if (firstOrDefault != null) { var dynModel = DynamoViewModel.Model; try { firstOrDefault.UninstallCore(dynModel.CustomNodeManager, PackageManagerExtension.PackageLoader, dynModel.PreferenceSettings); } catch { MessageBox.Show(String.Format(Resources.MessageFailToUninstallPackage, DynamoViewModel.BrandingResourceProvider.ProductName, packageDownloadHandle.Name), Resources.DeleteFailureMessageBoxTitle, MessageBoxButton.OK, MessageBoxImage.Error); } } SetPackageState(packageDownloadHandle, installPath); } catch (Exception e) { packageDownloadHandle.Error(e.Message); } })); }
/// <summary> /// Check Dynamo package install state /// </summary> /// <param name="packageDownloadHandle">package download handle</param> /// <param name="downloadPath">package download path</param> internal void SetPackageState(PackageDownloadHandle packageDownloadHandle, string downloadPath) { Package dynPkg; if (packageDownloadHandle.Extract(DynamoViewModel.Model, downloadPath, out dynPkg)) { PackageManagerExtension.PackageLoader.LoadPackages(new List <Package> { dynPkg }); packageDownloadHandle.DownloadState = PackageDownloadHandle.State.Installed; if (DebugModes.IsEnabled("DynamoPackageStates")) { // Temporary location for setting the package state. // Should be moved somewhere with more visibility into possible errors. dynPkg.PackageState = Package.PackageStates.Loaded; } } else { packageDownloadHandle.DownloadState = PackageDownloadHandle.State.Error; packageDownloadHandle.Error(Resources.MessageInvalidPackage); } }
/// <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> internal void DownloadAndInstall(PackageDownloadHandle packageDownloadHandle, string downloadPath) { Downloads.Add(packageDownloadHandle); packageDownloadHandle.DownloadState = PackageDownloadHandle.State.Downloading; Task.Factory.StartNew(() => { // Attempt to download package string pathDl; var res = Model.DownloadPackage(packageDownloadHandle.Header._id, packageDownloadHandle.VersionName, out pathDl); // if you fail, update download handle and return if (!res.Success) { packageDownloadHandle.Error(res.Error); return; } // if success, proceed to install the package DynamoViewModel.UIDispatcher.BeginInvoke((Action)(() => { try { packageDownloadHandle.Done(pathDl); Package dynPkg; var pmExtension = DynamoViewModel.Model.GetPackageManagerExtension(); var firstOrDefault = pmExtension.PackageLoader.LocalPackages.FirstOrDefault(pkg => pkg.Name == packageDownloadHandle.Name); if (firstOrDefault != null) { var dynModel = DynamoViewModel.Model; try { firstOrDefault.UninstallCore(dynModel.CustomNodeManager, pmExtension.PackageLoader, dynModel.PreferenceSettings); } catch { MessageBox.Show(String.Format(Resources.MessageFailToUninstallPackage, DynamoViewModel.BrandingResourceProvider.ProductName, packageDownloadHandle.Name), Resources.UninstallFailureMessageBoxTitle, MessageBoxButton.OK, MessageBoxImage.Error); } } if (packageDownloadHandle.Extract(DynamoViewModel.Model, downloadPath, out dynPkg)) { var p = Package.FromDirectory(dynPkg.RootDirectory, DynamoViewModel.Model.Logger); pmExtension.PackageLoader.Load(p); packageDownloadHandle.DownloadState = PackageDownloadHandle.State.Installed; } } catch (Exception e) { packageDownloadHandle.Error(e.Message); } })); }); }
/// <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) { var pkgDownload = new PackageDownload(packageDownloadHandle.Header._id, packageDownloadHandle.VersionName); this.Downloads.Add(packageDownloadHandle); Task.Factory.StartNew(() => { try { var response = Model.Client.Execute(pkgDownload); var pathDl = PackageDownload.GetFileFromResponse(response); dynamoViewModel.UIDispatcher.BeginInvoke((Action)(() => { try { packageDownloadHandle.Done(pathDl); Package dynPkg; var firstOrDefault = dynamoViewModel.Model.Loader.PackageLoader.LocalPackages.FirstOrDefault(pkg => pkg.Name == packageDownloadHandle.Name); if (firstOrDefault != null) { var dynModel = this.dynamoViewModel.Model; try { firstOrDefault.UninstallCore(dynModel.CustomNodeManager, dynModel.Loader.PackageLoader, dynModel.PreferenceSettings, dynModel.Logger); } catch { MessageBox.Show("Dynamo failed to uninstall the package: " + packageDownloadHandle.Name + " The package may need to be reinstalled manually.", "Uninstall Failure", MessageBoxButton.OK, MessageBoxImage.Error); } } if (packageDownloadHandle.Extract(out dynPkg)) { var downloadPkg = Package.FromDirectory(dynPkg.RootDirectory, this.dynamoViewModel.Model.Logger); var loader = dynamoViewModel.Model.Loader; var logger = dynamoViewModel.Model.Logger; var libraryServices = dynamoViewModel.Model.EngineController.LibraryServices; downloadPkg.LoadIntoDynamo(loader, logger, libraryServices); dynamoViewModel.Model.Loader.PackageLoader.LocalPackages.Add(downloadPkg); packageDownloadHandle.DownloadState = PackageDownloadHandle.State.Installed; } } catch (Exception e) { packageDownloadHandle.Error(e.Message); } })); } catch (Exception e) { packageDownloadHandle.Error(e.Message); } }); }
/// <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); } }); }