public async Task OnPackageDownloaded(string packageId, string version) { try { _logger.LogInformation($"{User.Identity.Name} downloaded {packageId}.{version}.nupkg"); var download = new PackageDownload { AuthTokenKey = User.FindFirstValue(FeedClaims.Token), IPAddress = RequestIP, PackageId = packageId, PackageVersion = version, UserAgent = UserAgent }; var sendFirstUseEmail = !await _dbContext.Downloads.AnyAsync(x => x.IPAddress == RequestIP && x.AuthTokenKey == download.AuthTokenKey); _dbContext.Downloads.Add(download); await _dbContext.SaveChangesAsync(); if (sendFirstUseEmail) { await SendEmail(EmailTemplates.TokenFirstUse, "Token used from new IP Address", packageId, version); } } catch (Exception ex) { _logger.LogError(ex, $"Unexpected error handling OnPackageDownloaded - {packageId} {version}"); } }
private static string DownloadPackageByIdTest() { var nv = new PackageDownload("5225e7dde2f476ca05000057"); var response = pmc.Execute(nv); var pathDl = PackageDownload.GetFileFromResponse(response); var output = FileUtilities.UnZip(pathDl); return pathDl; }
/// <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 = packageManagerClient.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); downloadPkg.LoadIntoDynamo(this.dynamoViewModel.Model.Loader, this.dynamoViewModel.Model.Logger); 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); } }); }
public PackageDownloadInfo(PackageDownload dto, Packaging.PackageSequenceInfo sequenceInfo) { this.dto = dto ?? throw new ArgumentNullException(nameof(dto)); this.sequenceInfo = sequenceInfo ?? throw new ArgumentNullException(nameof(sequenceInfo)); partsInProgress = new HashSet <int>(); int lastSegmentBits = (byte)(sequenceInfo.SegmentsCount % 8); lastByteMask = (byte)((1 << (lastSegmentBits == 0 ? 8 : lastSegmentBits)) - 1); }
internal PackageManagerResult DownloadPackage(string packageId, string version, out string pathToPackage) { try { var response = this.client.Execute(new PackageDownload(packageId, version)); pathToPackage = PackageDownload.GetFileFromResponse(response); return(PackageManagerResult.Succeeded()); } catch (Exception e) { pathToPackage = null; return(PackageManagerResult.Failed(e.Message)); } }
internal void DownloadAndInstall(PackageDownloadHandle packageDownloadHandle) { var pkgDownload = new PackageDownload(packageDownloadHandle.Header._id, packageDownloadHandle.VersionName); Downloads.Add(packageDownloadHandle); ThreadStart start = () => { try { var response = Client.Execute(pkgDownload); var pathDl = PackageDownload.GetFileFromResponse(response); dynSettings.Controller.UIDispatcher.BeginInvoke((Action)(() => { try { packageDownloadHandle.Done(pathDl); Package dynPkg; var firstOrDefault = dynSettings.PackageLoader.LocalPackages.FirstOrDefault(pkg => pkg.Name == packageDownloadHandle.Name); if (firstOrDefault != null) { firstOrDefault.UninstallCommand.Execute(); } if (packageDownloadHandle.Extract(out dynPkg)) { var downloadPkg = Package.FromDirectory(dynPkg.RootDirectory); downloadPkg.Load(); dynSettings.PackageLoader.LocalPackages.Add(downloadPkg); packageDownloadHandle.DownloadState = PackageDownloadHandle.State.Installed; } } catch (Exception e) { packageDownloadHandle.Error(e.Message); } })); } catch (Exception e) { packageDownloadHandle.Error(e.Message); } }; new Thread(start).Start(); }
public static PackageDownloadInfo CreateForCreatedPackage(ClientVersion version, Hash packageId, Packaging.PackageSequenceInfo sequenceInfo) { if (sequenceInfo == null) { throw new ArgumentNullException(nameof(sequenceInfo)); } var data = new PackageDownload() { PackageId = packageId, IsDownloading = false, // already downloaded DownloadedBytes = sequenceInfo.PackageSize, // all downloaded Version = version, SegmentsBitmap = null // already downloaded (=null) }; return(new PackageDownloadInfo(data, sequenceInfo)); }
public static PackageDownloadInfo CreateForReadyForDownloadPackage(ClientVersion version, Hash packageId, Packaging.PackageSequenceInfo sequenceInfo) { if (sequenceInfo == null) { throw new ArgumentNullException(nameof(sequenceInfo)); } int bitmapSize = GetBitmapSizeForPackage(sequenceInfo.SegmentsCount); var data = new PackageDownload() { PackageId = packageId, IsDownloading = false, // don't start automatically - this needs to be handled by downloader DownloadedBytes = 0, // nothing downloaded yet Version = version, SegmentsBitmap = new byte[bitmapSize] }; return(new PackageDownloadInfo(data, sequenceInfo)); }
internal string DownloadPackage(string packageId, string version) { var response = this.client.Execute(new PackageDownload(packageId, version)); return(PackageDownload.GetFileFromResponse(response)); }
/// <summary> /// 引发 <see cref="PackageDownload" /> 事件 /// </summary> /// <param name="e">包含此事件的参数</param> public virtual void OnPackageDownload(PackageEventArgs e) { PackageDownload?.Invoke(this, e); }