Example #1
0
        private void ReplaceArchiveWithExtractedContents(FileSystemItemModel archiveFileSystemItemModel, DirectoryInfo archiveExtractionDirectory)
        {
            //if (archiveFileSystemItemModel.ParentFileSystemItem.IsDirectory)
            //{
            //  FileSystemItemModel parent = archiveFileSystemItemModel.ParentFileSystemItem;
            //  ObservableCollection<FileSystemItemModel> parentContainigFileSystemElementCollection = parent.ChildFileSystemItems;
            //  int archiveFileIndex = parentContainigFileSystemElementCollection.IndexOf(archiveFileSystemItemModel);
            //  var archiveRepresentationNode = new FileSystemItemModel(
            //    parent.RootFileSystemItemModel,
            //    parent,
            //    archiveExtractionDirectory) {IsArchive = true, DisplayName = archiveFileSystemItemModel.Info.Name.Equals(archiveExtractionDirectory.Name, StringComparison.OrdinalIgnoreCase) ?  "" : archiveExtractionDirectory.Name };

            //  List<FileSystemItemModel> lazySubdirectories = archiveRepresentationNode.InitializeWithLazyTreeStructure();
            //  archiveRepresentationNode.SortChildren();
            //  FilterFileSystemTree(archiveRepresentationNode);

            //  Application.Current.Dispatcher.Invoke(
            //    () =>
            //    {
            //      parentContainigFileSystemElementCollection.Insert(archiveFileIndex, archiveRepresentationNode);
            //      parentContainigFileSystemElementCollection.Remove(archiveFileSystemItemModel);
            //      archiveFileSystemItemModel.ParentFileSystemItem.ChildFileSystemItems =
            //        parentContainigFileSystemElementCollection;
            //      if (archiveRepresentationNode.IsLazyLoading)
            //      {
            //        ObserveVirtualDirectories(lazySubdirectories);
            //      }
            //      archiveRepresentationNode.IsExpanded = true;
            //    },
            //    DispatcherPriority.Send);
            //}
        }
Example #2
0
 private void CleanUpExtraction(FileSystemItemModel archiveFileItemModel)
 {
     ClearIsExtracting();
     lock (this.syncLock)
     {
         this.ArchiveExtractorInstanceTable.Remove(archiveFileItemModel);
         this.ExtractionProgressTable.Remove(archiveFileItemModel.Info);
     }
     ClearIsBusy();
 }
Example #3
0
        public async Task <(bool IsSuccessful, DirectoryInfo DestinationDirectory)> ExtractArchive(FileSystemItemModel archiveFileItemModel)
        {
            if (archiveFileItemModel.IsDirectory || !archiveFileItemModel.Info.Exists)
            {
                return(false, new DirectoryInfo(@"c:\"));
            }

            SetIsBusy();
            var fileExtractor = new SharpCompressLibArchiveExtractor();

            lock (this.syncLock)
            {
                if (this.ArchiveExtractorInstanceTable.ContainsKey(archiveFileItemModel))
                {
                    ClearIsBusy();
                    return(false, new DirectoryInfo(@"c:\"));
                }

                this.ArchiveExtractorInstanceTable.Add(archiveFileItemModel, fileExtractor);
            }

            SetIsExtracting();

            var progressReporter = new Progress <ExtractionProgressEventArgs>(ReportExtractionProgress);

            (bool IsSuccessful, DirectoryInfo DestinationDirectory)extractionResult = await
                                                                                      fileExtractor.ExtractZipArchiveAsync(archiveFileItemModel.Info as FileInfo, progressReporter);

            // Replace archive file with directory representation in explorer after extraction completed
            if (extractionResult.IsSuccessful)
            {
                ReplaceArchiveWithExtractedContents(archiveFileItemModel, extractionResult.DestinationDirectory);
            }

            CleanUpExtraction(archiveFileItemModel);
            return(extractionResult);
        }