/// <summary> /// Loads the archive /// </summary> public void LoadArchive() { Logger.Info("The archive {0} is being loaded", DisplayName); // Clear existing items ClearAndDisposeItems(); // Indicate that no files have pending edits ModifiedFilesCount = 0; HasModifiedFiles = false; // Load the archive data ArchiveData = Manager.LoadArchive(ArchiveFileStream, Name); // Load the archive ArchiveData data = Manager.LoadArchiveData(ArchiveData, ArchiveFileStream, FilePath.Name); // Dispose the current generator ArchiveFileGenerator?.Dispose(); // Save the generator ArchiveFileGenerator = data.Generator; // Add each directory foreach (ArchiveDirectory 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.FirstOrDefault(x => x.ID == subDir) ?? prevItem.Add(subDir); } // Add the files prevItem.Files.AddRange(dir.Files.Select(x => new ArchiveFileViewModel(x, prevItem))); } }
/// <summary> /// Default constructor /// </summary> /// <param name="fileData">The file data</param> /// <param name="archiveDirectory">The archive directory the file belongs to</param> public ArchiveFileViewModel(ArchiveFileItem fileData, ArchiveDirectoryViewModel archiveDirectory) { // Set properties FileData = fileData; ArchiveDirectory = archiveDirectory; IconKind = PackIconMaterialKind.FileSyncOutline; FileDisplayInfo = new ObservableCollection <DuoGridItemViewModel>(); FileExports = new ObservableCollection <ArchiveFileMenuActionViewModel>(); EditActions = new ObservableCollection <ArchiveFileMenuActionViewModel>(); FullFilePath = Manager.CombinePaths(FullPath, FileName); // Create commands ImportCommand = new AsyncRelayCommand(ImportFileAsync); ReplaceCommand = new AsyncRelayCommand(ReplaceFileAsync); DeleteCommand = new AsyncRelayCommand(DeleteFileAsync); RenameCommand = new AsyncRelayCommand(RenameFileAsync); // Enable collection synchronization BindingOperations.EnableCollectionSynchronization(FileExports, Application.Current); BindingOperations.EnableCollectionSynchronization(EditActions, Application.Current); BindingOperations.EnableCollectionSynchronization(FileDisplayInfo, Application.Current); }