/// <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");
        }