using System.Collections.Generic; using SharpCompress.Common.Rar; namespace SharpCompress.Archives.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 (!fp.FileHeader.IsSplitAfter) { 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); } } } }