/// <summary> /// Loads the archive /// </summary> public void LoadArchive() { RL.Logger?.LogInformationSource($"The archive {DisplayName} is being loaded"); // Clear existing items ClearAndDisposeItems(); // Load the archive data ArchiveData = Manager.LoadArchive(ArchiveFileStream); // Load the archive var data = Manager.LoadArchiveData(ArchiveData, ArchiveFileStream); // Dispose the current generator ArchiveFileGenerator?.Dispose(); // Save the generator ArchiveFileGenerator = data.Generator; // Add each directory foreach (var dir in data.Directories) { // Check if it's the root directory if (dir.DirectoryName == String.Empty) { // Add the files Files.AddRange(dir.Files.Select(x => new ArchiveFileViewModel(x, this))); continue; } // Keep track of the previous item ArchiveDirectoryViewModel prevItem = this; // Enumerate each sub directory foreach (string subDir in dir.DirectoryName.Trim(Manager.PathSeparatorCharacter).Split(Manager.PathSeparatorCharacter)) { // Set the previous item and create the item if it doesn't already exist prevItem = prevItem.FindItem(x => x.ID == subDir) ?? prevItem.Add(subDir); } // Add the files prevItem.Files.AddRange(dir.Files.Select(x => new ArchiveFileViewModel(x, this))); } }
public override void Dispose() { // Cancel refreshing thumbnails ExplorerDialogViewModel.CancelRefreshingThumbnails = true; // Dispose base class base.Dispose(); // Dispose the stream ArchiveFileStream?.Dispose(); // Dispose every directory ClearAndDisposeItems(); // Dispose the generator ArchiveFileGenerator?.Dispose(); RL.Logger?.LogInformationSource($"The archive {DisplayName} has been disposed"); }