using System.Collections.Generic; using SharpCompress.Common; using SharpCompress.Common.Rar; using SharpCompress.Common.Rar.Headers; namespace SharpCompress.Archive.Rar { internal static class RarArchiveEntryFactory { private static IEnumerable GetFileParts(IEnumerable parts) { foreach (RarVolume rarPart in parts) { foreach (RarFilePart fp in rarPart.ReadFileParts()) { yield return fp; } } } private static IEnumerable> GetMatchedFileParts(IEnumerable parts) { var groupedParts = new List(); foreach (RarFilePart fp in GetFileParts(parts)) { groupedParts.Add(fp); if (!FlagUtility.HasFlag((long)fp.FileHeader.FileFlags, (long)FileFlags.SPLIT_AFTER)) { yield return groupedParts; groupedParts = new List(); } } if (groupedParts.Count > 0) { yield return groupedParts; } } internal static IEnumerable GetEntries(RarArchive archive, IEnumerable rarParts) { foreach (var groupedParts in GetMatchedFileParts(rarParts)) { yield return new RarArchiveEntry(archive, groupedParts); } } } }