示例#1
0
    /// <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)));
        }
    }
示例#2
0
    /// <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);
    }