withSIX.Sync.Core.Packages.PackageManager.UpdateMultiple C# (CSharp) Method

UpdateMultiple() private method

private UpdateMultiple ( IReadOnlyCollection objects, IReadOnlyCollection packages, IReadOnlyCollection remotes ) : Task
objects IReadOnlyCollection
packages IReadOnlyCollection
remotes IReadOnlyCollection
return Task
        async Task<string[]> UpdateMultiple(IReadOnlyCollection<Package.ObjectMap> objects,
            IReadOnlyCollection<Package> packages,
            IReadOnlyCollection<Uri> remotes) {
            if (!objects.Any()) {
                Repository.Log("No remote objects to resolve");
                return new string[0];
            }
            Repository.Log("Resolving {0} remote objects for {1} packages from {2} remotes, please be patient..",
                objects.Count, packages.Count, remotes.Count);

            var doneObjects = new ConcurrentBag<FileObjectMapping>();

            var relObjects = objects.OrderByDescending(x => Tools.FileUtil.SizePrediction(x.FO.FilePath))
                .Select(x => new FileFetchInfo(Repo.GetObjectSubPath(x.FO), x.FO.FilePath) {
                    ExistingPath = x.ExistingObject != null ? Repo.GetObjectSubPath(x.ExistingObject) : null,
                    OnComplete = () => doneObjects.Add(x.FO)
                })
                .ToArray();

            StatusRepo.Reset(RepoStatus.Downloading, objects.Count);
            StatusRepo.ProcessSize(GetExistingObjects(objects.Select(x => x.FO), packages), Repo.ObjectsPath,
                GetPackedSize(packages));
            try {
                await
                    Package.DownloadObjects(remotes, StatusRepo, relObjects, Repo.ObjectsPath).ConfigureAwait(false);
            } finally {
                Repo.ReAddObject(doneObjects.Select(x => x.Checksum).ToArray());
            }

            return relObjects.Select(x => x.FilePath).ToArray();
        }