private void Application_Startup(object sender, StartupEventArgs e) { // create a loader page Progress loader = new Progress(); // set the visual root to loader page this.RootVisual = loader; // Debug helper -> make sure we have html params! if (e.InitParams.Count == 0) { MessageBox.Show("Error: You must tell your loader what files to load in your web page(init params) or manually in the code!", "Loader Error Message", MessageBoxButton.OK); //throw new Exception("Loader init params error"); return; } // create package download manager and start the download process using html supplied InitParams // note the last param sets a 100KB max download speed for debuging and simulation mode! PackageDownloadManager pdm = new PackageDownloadManager(loader, e.InitParams, 0); // another option is to use a hand coded list -> //List<Uri> myDownloadList = new List<Uri>(); //myDownloadList.Add(new Uri("ClientBin/Beegger.xap", UriKind.RelativeOrAbsolute)); //ParamUtil.fixRelativeLinks(ref myDownloadList); //PackageDownloadManager pdm = new PackageDownloadManager(loader, myDownloadList, 50); }
public WebFacade(AppInfo appInfo, PackageDownloadManager packageDownloadManager, PackageDataValidator validator, LocalPackageManager localPackageManager, IPeerRegistry peerRegistry, IPackageRegistry packageRegistry, InstanceHash instanceHash, LongRunningTasksManager tasks, PeersCluster peersCluster) { this.appInfo = appInfo ?? throw new ArgumentNullException(nameof(appInfo)); this.packageDownloadManager = packageDownloadManager ?? throw new ArgumentNullException(nameof(packageDownloadManager)); this.validator = validator ?? throw new ArgumentNullException(nameof(validator)); this.localPackageManager = localPackageManager ?? throw new ArgumentNullException(nameof(localPackageManager)); this.peerRegistry = peerRegistry ?? throw new ArgumentNullException(nameof(peerRegistry)); this.packageRegistry = packageRegistry ?? throw new ArgumentNullException(nameof(packageRegistry)); this.instanceHash = instanceHash ?? throw new ArgumentNullException(nameof(instanceHash)); this.tasks = tasks ?? throw new ArgumentNullException(nameof(tasks)); this.peersCluster = peersCluster ?? throw new ArgumentNullException(nameof(peersCluster)); }
public async Task Load(PackagesLock packagesLock, IServerInfo serverInfo, CancellationToken token) { var serverRepo = new ServerRepository(new Uri(serverInfo.ServerUri, "nuget")); var context = new PackageDownloadContext(new SourceCacheContext { DirectDownload = true, NoCache = true }, Environment.ExpandEnvironmentVariables(_options.TempPath), true); var packageDownloadManager = new PackageDownloadManager(_modulesDirectory, serverRepo); var result = await packageDownloadManager.DownloadPackages(packagesLock, context, NullLogger.Instance, token); if (result.Any()) { try { foreach (var preFetchResult in result.Values) { using (var downloadPackageResult = await preFetchResult.GetResultAsync()) { // use the version exactly as specified in the nuspec file var packageIdentity = await downloadPackageResult.PackageReader.GetIdentityAsync(token); var packageExtractionContext = new PackageExtractionContext( PackageSaveMode.Defaultv3, PackageExtractionBehavior.XmlDocFileSaveMode, ClientPolicyContext.GetClientPolicy(new NullSettings(), new NullLogger()), new NullLogger()); downloadPackageResult.PackageStream.Position = 0; await PackageExtractor.InstallFromSourceAsync(serverRepo.PackageSource.Source, packageIdentity, stream => downloadPackageResult.PackageStream.CopyToAsync(stream), _modulesDirectory.VersionFolderPathResolver, packageExtractionContext, token); } } } finally { foreach (var fetcherResult in result.Values) { await fetcherResult.EnsureResultAsync(); fetcherResult.Dispose(); } } } }
public AppInstanceBootstrapper( PackageDownloadManager packageDownloadManager, UdpPeerDiscovery udpPeerDiscovery, IPeerRegistry peerRegistry, IPackageRegistry packageRegistry, LocalPackageManager localPackageManager, PeersCluster peersCluster ) { PackageDownloadManager = packageDownloadManager ?? throw new ArgumentNullException(nameof(packageDownloadManager)); UdpPeerDiscovery = udpPeerDiscovery ?? throw new ArgumentNullException(nameof(udpPeerDiscovery)); PeerRegistry = peerRegistry ?? throw new ArgumentNullException(nameof(peerRegistry)); PackageRegistry = packageRegistry ?? throw new ArgumentNullException(nameof(packageRegistry)); LocalPackageManager = localPackageManager ?? throw new ArgumentNullException(nameof(localPackageManager)); PeersCluster = peersCluster ?? throw new ArgumentNullException(nameof(peersCluster)); }
private void Application_Startup(object sender, StartupEventArgs e) { // create a loader page Loader loader = new Loader(); // set the visual root to loader page this.RootVisual = loader; // create package download manager and start the download process using html supplied InitParams // note the last param sets a 50KB max download speed for debuging and simulation mode! PackageDownloadManager pdm = new PackageDownloadManager(loader, e.InitParams, 50); // another option is to use a hand coded list -> //List<Uri> myDownloadList = new List<Uri>(); //myDownloadList.Add(new Uri("ClientBin/Beegger.xap", UriKind.RelativeOrAbsolute)); //ParamUtil.fixRelativeLinks(ref myDownloadList); //PackageDownloadManager pdm = new PackageDownloadManager(loader, myDownloadList, 50); }
public void Start(AppInstanceSettings settings) { if (settings.DownloadEverything) { PackageRegistry.RemotePackageDiscovered += (package) => { if (PackageDownloadManager.GetDiscoveredPackageAndStartDownloadPackage(package, out var task)) { task.Wait(); } }; } UdpPeerDiscovery.EnableAutoSearch( allowListener: settings.EnableUdpDiscoveryListener, allowClient: settings.EnableUdpDiscoveryClient ); PackageDownloadManager.RestoreUnfinishedDownloads(); }
public static void Initialise(string downloadsPath, string packagesPath, string sourcePortsPath) { if (downloadsPath is null) { throw new ArgumentNullException(nameof(downloadsPath)); } if (packagesPath is null) { throw new ArgumentNullException(nameof(packagesPath)); } if (sourcePortsPath is null) { throw new ArgumentNullException(nameof(sourcePortsPath)); } if (Packages != null || SourcePorts != null) { throw new Exception("Attempted to re-initialise DownloadService."); } Packages = new PackageDownloadManager(downloadsPath, packagesPath); SourcePorts = new SourcePortDownloadManager(downloadsPath, sourcePortsPath); }
public HttpApiController(PeersCluster peersCluster, IPackageRegistry packageRegistry, PackageDownloadManager downloadManager) { this.peersCluster = peersCluster ?? throw new ArgumentNullException(nameof(peersCluster)); this.packageRegistry = packageRegistry ?? throw new ArgumentNullException(nameof(packageRegistry)); this.downloadManager = downloadManager ?? throw new ArgumentNullException(nameof(downloadManager)); }
public async Task <Dictionary <PackageIdentity, FileInfoBase> > LoadPackages(PackagesLock packagesLock, DirectoryInfoBase tempDirectory, CancellationToken cancellationToken) { var result = new Dictionary <PackageIdentity, FileInfoBase>(); var packagesToDownload = new List <PackageIdentity>(); foreach (var packageId in packagesLock.Keys) { var filePath = _versionFolderPathResolver.GetPackageFilePath(packageId.Id, packageId.Version); var file = _fileSystem.FileInfo.FromFileName(filePath); if (file.Exists) { _logger.LogDebug("Package {packageId} could be resolved locally at {path}", packageId, file.FullName); result.Add(packageId, file); } else { _logger.LogDebug("Package {packageId} could not be resolved locally", packageId); packagesToDownload.Add(packageId); } cancellationToken.ThrowIfCancellationRequested(); } if (packagesToDownload.Any()) { _logger.LogInformation("{0} package(s) were not found locally and will be downloaded.", packagesToDownload.Count); var nugetFolder = tempDirectory.CreateSubdirectory("nuget"); var tempFolderPathResolver = new VersionFolderPathResolverFlat(nugetFolder.FullName); var serverRepo = new ServerRepository(new Uri(_restClient.Server.ServerUri, "nuget")); var downloader = new PackageDownloadManager(new ModulesDirectory(tempFolderPathResolver), serverRepo); var results = await downloader.DownloadPackages( new PackagesLock(packagesToDownload.ToDictionary(x => x, _ => (IImmutableList <PackageIdentity>)ImmutableList <PackageIdentity> .Empty)), new PackageDownloadContext(new SourceCacheContext { DirectDownload = true, NoCache = true }, nugetFolder.FullName, true), new NuGetLoggerWrapper(_logger), cancellationToken); try { foreach (var preFetchResult in results.Values) { using (var downloadPackageResult = await preFetchResult.GetResultAsync()) { var packageIdentity = await downloadPackageResult.PackageReader.GetIdentityAsync(cancellationToken); _logger.LogInformation("Package {0} was successfully downloaded.", packageIdentity); var fileStream = (FileStream)downloadPackageResult.PackageStream; var file = _fileSystem.FileInfo.FromFileName(fileStream.Name); if (!file.Exists) { _logger.LogError("Package {0} was not found at {1}. The download may have failed.", packageIdentity, file.FullName); throw new FileNotFoundException($"The file {file.FullName} does not exist."); } var packagePath = _fileSystem.Path.Combine(_fileSystem.Path.GetDirectoryName(file.FullName), packageIdentity + ".nupkg"); using (var stream = _fileSystem.FileStream.Create(packagePath, FileMode.CreateNew)) await fileStream.CopyToAsync(stream); result.Add(packageIdentity, _fileSystem.FileInfo.FromFileName(packagePath)); } } } finally { foreach (var fetcherResult in results.Values) { await fetcherResult.EnsureResultAsync(); fetcherResult.Dispose(); } } } return(result); }