private Task <List <RemoteAsset> > GetInstallTask(SynchronizedCollection <RemoteAsset> downloadedFiles, Task downloadTask, Dictionary <RemoteAsset, ProjectReleaseFileInstaller> filesToInstall) { return(Task.Run(() => { List <RemoteAsset> failedInstalls = new List <RemoteAsset>(); using (ChildProgressBar child = progressBar.Spawn(filesToInstall.Count, "Installing files", new ProgressBarOptions { DisableBottomPercentage = false })) { while (!downloadTask.IsCompleted || downloadedFiles.Count > 0) { List <RemoteAsset> packagedFiles = new List <RemoteAsset>(); for (int i = 0; i < downloadedFiles.Count; i++) { RemoteAsset fileToPackage = downloadedFiles[i]; child.Tick(String.Format("Installing {0}/{1}", fileToPackage.StringVersion, fileToPackage.FileFullPath)); try { filesToInstall[fileToPackage].InstallFile(fileToPackage); } catch (Exception) { failedInstalls.Add(fileToPackage); } fileToPackage.AssetContent.FlushAssetData(); packagedFiles.Add(fileToPackage); } packagedFiles.ForEach(x => downloadedFiles.Remove(x)); } child.Tick("Installation done"); } return failedInstalls; })); }
public void RegisterFile(RemoteAsset remoteAsset, ProjectReleaseFileInstaller fileInstaller) { this.registeredFiles.Add(remoteAsset, fileInstaller); }