RarArchiveEntryFactory.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System.Collections.Generic;
  2. using SharpCompress.Common.Rar;
  3. namespace SharpCompress.Archives.Rar
  4. {
  5. internal static class RarArchiveEntryFactory
  6. {
  7. private static IEnumerable<RarFilePart> GetFileParts(IEnumerable<RarVolume> parts)
  8. {
  9. foreach (RarVolume rarPart in parts)
  10. {
  11. foreach (RarFilePart fp in rarPart.ReadFileParts())
  12. {
  13. yield return fp;
  14. }
  15. }
  16. }
  17. private static IEnumerable<IEnumerable<RarFilePart>> GetMatchedFileParts(IEnumerable<RarVolume> parts)
  18. {
  19. var groupedParts = new List<RarFilePart>();
  20. foreach (RarFilePart fp in GetFileParts(parts))
  21. {
  22. groupedParts.Add(fp);
  23. if (!fp.FileHeader.IsSplitAfter)
  24. {
  25. yield return groupedParts;
  26. groupedParts = new List<RarFilePart>();
  27. }
  28. }
  29. if (groupedParts.Count > 0)
  30. {
  31. yield return groupedParts;
  32. }
  33. }
  34. internal static IEnumerable<RarArchiveEntry> GetEntries(RarArchive archive,
  35. IEnumerable<RarVolume> rarParts)
  36. {
  37. foreach (var groupedParts in GetMatchedFileParts(rarParts))
  38. {
  39. yield return new RarArchiveEntry(archive, groupedParts);
  40. }
  41. }
  42. }
  43. }