示例#1
0
        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;
            }));
        }
示例#2
0
 public void RegisterFile(RemoteAsset remoteAsset, ProjectReleaseFileInstaller fileInstaller)
 {
     this.registeredFiles.Add(remoteAsset, fileInstaller);
 }