Example #1
0
        private void ExtractFiles(List <ExtractFileInfo> fileList)
        {
            _progressController.SetTitle(this.L("package_support", "extract_state_extracting"));

            for (var i = 0; i < fileList.Count; ++i)
            {
                if (_progressController.IsCanceled)
                {
                    _task = _task.ContinueWith(t => _progressController.CloseAsync().Wait())
                            .ContinueWith(t => this.EndAndDispose(this.L("package_support", "extract_state_cancelled")));
                    return;
                }

                var file = fileList[i];

                _progressController.SetProgress((double)i / fileList.Count);
                _progressController.SetMessage(file.RelativePath);


                string directory;

                if (file.Entry.IsDirectory)
                {
                    directory = file.DestinationPath;
                }
                else
                {
                    directory = Path.GetDirectoryName(file.DestinationPath);
                }

                if (!Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }

                if (file.Entry.IsDirectory)
                {
                    continue;
                }

                using (var zipStream = file.ZipFile.GetInputStream(file.Entry))
                {
                    using (var fileStream = File.Create(file.DestinationPath))
                    {
                        zipStream.CopyTo(fileStream);
                    }
                }
            }

            foreach (var zipFile in fileList.Select(f => f.ZipFile).Distinct())
            {
                zipFile.Close();
            }

            _task = _task.ContinueWith(t => _progressController.CloseAsync().Wait())
                    .ContinueWith(t => this.EndAndDispose(this.L("package_support", "extract_state_finished")));
        }