From 05ebf2200912231e4fbc5b464e6b8f6a4d2f84f2 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Mon, 12 Jan 2026 12:08:25 +0000 Subject: [PATCH] Start using the interface to draw distinction between async and sync --- .../Archives/GZip/GZipArchive.cs | 20 ++++++------- src/SharpCompress/Archives/Rar/RarArchive.cs | 22 +++++++------- .../Archives/SevenZip/SevenZipArchive.cs | 21 ++++++------- src/SharpCompress/Archives/Tar/TarArchive.cs | 20 ++++++------- src/SharpCompress/Archives/Zip/ZipArchive.cs | 30 ++++++++++++------- src/SharpCompress/Factories/AceFactory.cs | 2 +- src/SharpCompress/Factories/ArcFactory.cs | 2 +- src/SharpCompress/Factories/ArjFactory.cs | 2 +- src/SharpCompress/Factories/GZipFactory.cs | 2 +- src/SharpCompress/Factories/RarFactory.cs | 2 +- src/SharpCompress/Factories/TarFactory.cs | 2 +- src/SharpCompress/Factories/ZipFactory.cs | 2 +- .../Polyfills/AsyncEnumerableExtensions.cs | 16 ++++++++-- src/SharpCompress/Readers/Ace/AceReader.cs | 4 +-- src/SharpCompress/Readers/Arc/ArcReader.cs | 2 +- src/SharpCompress/Readers/Arj/ArjReader.cs | 4 +-- src/SharpCompress/Readers/GZip/GZipReader.cs | 4 +-- src/SharpCompress/Readers/Rar/RarReader.cs | 12 ++++---- src/SharpCompress/Readers/Tar/TarReader.cs | 2 +- src/SharpCompress/Readers/Zip/ZipReader.cs | 8 ++--- tests/SharpCompress.Test/GZip/AsyncTests.cs | 6 ++-- .../GZip/GZipArchiveAsyncTests.cs | 8 ++--- 22 files changed, 103 insertions(+), 90 deletions(-) diff --git a/src/SharpCompress/Archives/GZip/GZipArchive.cs b/src/SharpCompress/Archives/GZip/GZipArchive.cs index 7c8c08f7..6214c301 100644 --- a/src/SharpCompress/Archives/GZip/GZipArchive.cs +++ b/src/SharpCompress/Archives/GZip/GZipArchive.cs @@ -21,7 +21,7 @@ public class GZipArchive : AbstractWritableArchive /// /// /// - public static GZipArchive Open(string filePath, ReaderOptions? readerOptions = null) + public static IArchive Open(string filePath, ReaderOptions? readerOptions = null) { filePath.NotNullOrEmpty(nameof(filePath)); return Open(new FileInfo(filePath), readerOptions ?? new ReaderOptions()); @@ -32,7 +32,7 @@ public class GZipArchive : AbstractWritableArchive /// /// /// - public static GZipArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null) + public static IArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null) { fileInfo.NotNull(nameof(fileInfo)); return new GZipArchive( @@ -49,7 +49,7 @@ public class GZipArchive : AbstractWritableArchive /// /// /// - public static GZipArchive Open( + public static IArchive Open( IEnumerable fileInfos, ReaderOptions? readerOptions = null ) @@ -70,7 +70,7 @@ public class GZipArchive : AbstractWritableArchive /// /// /// - public static GZipArchive Open(IEnumerable streams, ReaderOptions? readerOptions = null) + public static IArchive Open(IEnumerable streams, ReaderOptions? readerOptions = null) { streams.NotNull(nameof(streams)); var strms = streams.ToArray(); @@ -88,7 +88,7 @@ public class GZipArchive : AbstractWritableArchive /// /// /// - public static GZipArchive Open(Stream stream, ReaderOptions? readerOptions = null) + public static IArchive Open(Stream stream, ReaderOptions? readerOptions = null) { stream.NotNull(nameof(stream)); @@ -115,7 +115,7 @@ public class GZipArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(stream, readerOptions)); + return new((IAsyncArchive)Open(stream, readerOptions)); } /// @@ -131,7 +131,7 @@ public class GZipArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(fileInfo, readerOptions)); + return new((IAsyncArchive)Open(fileInfo, readerOptions)); } /// @@ -147,7 +147,7 @@ public class GZipArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(streams, readerOptions)); + return new((IAsyncArchive)Open(streams, readerOptions)); } /// @@ -163,7 +163,7 @@ public class GZipArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(fileInfos, readerOptions)); + return new((IAsyncArchive)Open(fileInfos, readerOptions)); } public static GZipArchive Create() => new(); @@ -344,6 +344,6 @@ public class GZipArchive : AbstractWritableArchive { var stream = Volumes.Single().Stream; stream.Position = 0; - return new(GZipReader.Open(stream)); + return new((IAsyncReader)GZipReader.Open(stream)); } } diff --git a/src/SharpCompress/Archives/Rar/RarArchive.cs b/src/SharpCompress/Archives/Rar/RarArchive.cs index 03b8d4d9..374755af 100644 --- a/src/SharpCompress/Archives/Rar/RarArchive.cs +++ b/src/SharpCompress/Archives/Rar/RarArchive.cs @@ -82,12 +82,12 @@ public class RarArchive : AbstractArchive volume.Stream.Position = 0; return volume.Stream; }); - return RarReader.Open(streams, ReaderOptions); + return (RarReader)RarReader.Open(streams, ReaderOptions); } var stream = Volumes.First().Stream; stream.Position = 0; - return RarReader.Open(stream, ReaderOptions); + return (RarReader)RarReader.Open(stream, ReaderOptions); } public override bool IsSolid => Volumes.First().IsSolidArchive; @@ -103,7 +103,7 @@ public class RarArchive : AbstractArchive /// /// /// - public static RarArchive Open(string filePath, ReaderOptions? options = null) + public static IArchive Open(string filePath, ReaderOptions? options = null) { filePath.NotNullOrEmpty(nameof(filePath)); var fileInfo = new FileInfo(filePath); @@ -121,7 +121,7 @@ public class RarArchive : AbstractArchive /// /// /// - public static RarArchive Open(FileInfo fileInfo, ReaderOptions? options = null) + public static IArchive Open(FileInfo fileInfo, ReaderOptions? options = null) { fileInfo.NotNull(nameof(fileInfo)); return new RarArchive( @@ -138,7 +138,7 @@ public class RarArchive : AbstractArchive /// /// /// - public static RarArchive Open(Stream stream, ReaderOptions? options = null) + public static IArchive Open(Stream stream, ReaderOptions? options = null) { stream.NotNull(nameof(stream)); @@ -155,7 +155,7 @@ public class RarArchive : AbstractArchive /// /// /// - public static RarArchive Open( + public static IArchive Open( IEnumerable fileInfos, ReaderOptions? readerOptions = null ) @@ -176,7 +176,7 @@ public class RarArchive : AbstractArchive /// /// /// - public static RarArchive Open(IEnumerable streams, ReaderOptions? readerOptions = null) + public static IArchive Open(IEnumerable streams, ReaderOptions? readerOptions = null) { streams.NotNull(nameof(streams)); var strms = streams.ToArray(); @@ -202,7 +202,7 @@ public class RarArchive : AbstractArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(stream, readerOptions)); + return new((IAsyncArchive)Open(stream, readerOptions)); } /// @@ -218,7 +218,7 @@ public class RarArchive : AbstractArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(fileInfo, readerOptions)); + return new((IAsyncArchive)Open(fileInfo, readerOptions)); } /// @@ -234,7 +234,7 @@ public class RarArchive : AbstractArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(streams, readerOptions)); + return new((IAsyncArchive)Open(streams, readerOptions)); } /// @@ -250,7 +250,7 @@ public class RarArchive : AbstractArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(fileInfos, readerOptions)); + return new((IAsyncArchive)Open(fileInfos, readerOptions)); } public static bool IsRarFile(string filePath) => IsRarFile(new FileInfo(filePath)); diff --git a/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs b/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs index 43f49abe..5b606327 100644 --- a/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs +++ b/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs @@ -21,7 +21,7 @@ public class SevenZipArchive : AbstractArchive /// /// - public static SevenZipArchive Open(string filePath, ReaderOptions? readerOptions = null) + public static IArchive Open(string filePath, ReaderOptions? readerOptions = null) { filePath.NotNullOrEmpty("filePath"); return Open(new FileInfo(filePath), readerOptions ?? new ReaderOptions()); @@ -32,7 +32,7 @@ public class SevenZipArchive : AbstractArchive /// /// - public static SevenZipArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null) + public static IArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null) { fileInfo.NotNull("fileInfo"); return new SevenZipArchive( @@ -49,7 +49,7 @@ public class SevenZipArchive : AbstractArchive /// /// - public static SevenZipArchive Open( + public static IArchive Open( IEnumerable fileInfos, ReaderOptions? readerOptions = null ) @@ -70,10 +70,7 @@ public class SevenZipArchive : AbstractArchive /// /// - public static SevenZipArchive Open( - IEnumerable streams, - ReaderOptions? readerOptions = null - ) + public static IArchive Open(IEnumerable streams, ReaderOptions? readerOptions = null) { streams.NotNull(nameof(streams)); var strms = streams.ToArray(); @@ -91,7 +88,7 @@ public class SevenZipArchive : AbstractArchive /// /// - public static SevenZipArchive Open(Stream stream, ReaderOptions? readerOptions = null) + public static IArchive Open(Stream stream, ReaderOptions? readerOptions = null) { stream.NotNull("stream"); @@ -118,7 +115,7 @@ public class SevenZipArchive : AbstractArchive @@ -134,7 +131,7 @@ public class SevenZipArchive : AbstractArchive @@ -150,7 +147,7 @@ public class SevenZipArchive : AbstractArchive @@ -166,7 +163,7 @@ public class SevenZipArchive : AbstractArchive diff --git a/src/SharpCompress/Archives/Tar/TarArchive.cs b/src/SharpCompress/Archives/Tar/TarArchive.cs index 1aeaf9a7..fe5298b1 100644 --- a/src/SharpCompress/Archives/Tar/TarArchive.cs +++ b/src/SharpCompress/Archives/Tar/TarArchive.cs @@ -22,7 +22,7 @@ public class TarArchive : AbstractWritableArchive /// /// /// - public static TarArchive Open(string filePath, ReaderOptions? readerOptions = null) + public static IArchive Open(string filePath, ReaderOptions? readerOptions = null) { filePath.NotNullOrEmpty(nameof(filePath)); return Open(new FileInfo(filePath), readerOptions ?? new ReaderOptions()); @@ -33,7 +33,7 @@ public class TarArchive : AbstractWritableArchive /// /// /// - public static TarArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null) + public static IArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null) { fileInfo.NotNull(nameof(fileInfo)); return new TarArchive( @@ -50,7 +50,7 @@ public class TarArchive : AbstractWritableArchive /// /// /// - public static TarArchive Open( + public static IArchive Open( IEnumerable fileInfos, ReaderOptions? readerOptions = null ) @@ -71,7 +71,7 @@ public class TarArchive : AbstractWritableArchive /// /// /// - public static TarArchive Open(IEnumerable streams, ReaderOptions? readerOptions = null) + public static IArchive Open(IEnumerable streams, ReaderOptions? readerOptions = null) { streams.NotNull(nameof(streams)); var strms = streams.ToArray(); @@ -89,7 +89,7 @@ public class TarArchive : AbstractWritableArchive /// /// /// - public static TarArchive Open(Stream stream, ReaderOptions? readerOptions = null) + public static IArchive Open(Stream stream, ReaderOptions? readerOptions = null) { stream.NotNull(nameof(stream)); @@ -116,7 +116,7 @@ public class TarArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(stream, readerOptions)); + return new((IAsyncArchive)Open(stream, readerOptions)); } /// @@ -132,7 +132,7 @@ public class TarArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(fileInfo, readerOptions)); + return new((IAsyncArchive)Open(fileInfo, readerOptions)); } /// @@ -148,7 +148,7 @@ public class TarArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(streams, readerOptions)); + return new((IAsyncArchive)Open(streams, readerOptions)); } /// @@ -164,7 +164,7 @@ public class TarArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(fileInfos, readerOptions)); + return new((IAsyncArchive)Open(fileInfos, readerOptions)); } public static bool IsTarFile(string filePath) => IsTarFile(new FileInfo(filePath)); @@ -371,6 +371,6 @@ public class TarArchive : AbstractWritableArchive { var stream = Volumes.Single().Stream; stream.Position = 0; - return new(TarReader.Open(stream)); + return new((IAsyncReader)TarReader.Open(stream)); } } diff --git a/src/SharpCompress/Archives/Zip/ZipArchive.cs b/src/SharpCompress/Archives/Zip/ZipArchive.cs index 756bc886..e7bb2466 100644 --- a/src/SharpCompress/Archives/Zip/ZipArchive.cs +++ b/src/SharpCompress/Archives/Zip/ZipArchive.cs @@ -43,7 +43,7 @@ public class ZipArchive : AbstractWritableArchive /// /// /// - public static ZipArchive Open(string filePath, ReaderOptions? readerOptions = null) + public static IArchive Open(string filePath, ReaderOptions? readerOptions = null) { filePath.NotNullOrEmpty(nameof(filePath)); return Open(new FileInfo(filePath), readerOptions ?? new ReaderOptions()); @@ -54,7 +54,7 @@ public class ZipArchive : AbstractWritableArchive /// /// /// - public static ZipArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null) + public static IArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null) { fileInfo.NotNull(nameof(fileInfo)); return new ZipArchive( @@ -71,7 +71,7 @@ public class ZipArchive : AbstractWritableArchive /// /// /// - public static ZipArchive Open( + public static IArchive Open( IEnumerable fileInfos, ReaderOptions? readerOptions = null ) @@ -92,7 +92,7 @@ public class ZipArchive : AbstractWritableArchive /// /// /// - public static ZipArchive Open(IEnumerable streams, ReaderOptions? readerOptions = null) + public static IArchive Open(IEnumerable streams, ReaderOptions? readerOptions = null) { streams.NotNull(nameof(streams)); var strms = streams.ToArray(); @@ -110,7 +110,7 @@ public class ZipArchive : AbstractWritableArchive /// /// /// - public static ZipArchive Open(Stream stream, ReaderOptions? readerOptions = null) + public static IArchive Open(Stream stream, ReaderOptions? readerOptions = null) { stream.NotNull(nameof(stream)); @@ -124,6 +124,16 @@ public class ZipArchive : AbstractWritableArchive ); } + public static ValueTask OpenAsync( + string path, + ReaderOptions? readerOptions = null, + CancellationToken cancellationToken = default + ) + { + cancellationToken.ThrowIfCancellationRequested(); + return new((IAsyncArchive)Open(path, readerOptions)); + } + /// /// Opens a ZipArchive asynchronously from a stream. /// @@ -137,7 +147,7 @@ public class ZipArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(stream, readerOptions)); + return new((IAsyncArchive)Open(stream, readerOptions)); } /// @@ -153,7 +163,7 @@ public class ZipArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(fileInfo, readerOptions)); + return new((IAsyncArchive)Open(fileInfo, readerOptions)); } /// @@ -169,7 +179,7 @@ public class ZipArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(streams, readerOptions)); + return new((IAsyncArchive)Open(streams, readerOptions)); } /// @@ -185,7 +195,7 @@ public class ZipArchive : AbstractWritableArchive ) { cancellationToken.ThrowIfCancellationRequested(); - return new(Open(fileInfos, readerOptions)); + return new((IAsyncArchive)Open(fileInfos, readerOptions)); } public static bool IsZipFile( @@ -597,6 +607,6 @@ public class ZipArchive : AbstractWritableArchive { var stream = Volumes.Single().Stream; stream.Position = 0; - return new(ZipReader.Open(stream)); + return new((IAsyncReader)ZipReader.Open(stream)); } } diff --git a/src/SharpCompress/Factories/AceFactory.cs b/src/SharpCompress/Factories/AceFactory.cs index 95f647dd..eb896b54 100644 --- a/src/SharpCompress/Factories/AceFactory.cs +++ b/src/SharpCompress/Factories/AceFactory.cs @@ -36,7 +36,7 @@ namespace SharpCompress.Factories Stream stream, ReaderOptions? options, CancellationToken cancellationToken = default - ) => new(AceReader.Open(stream, options)); + ) => new((IAsyncReader)AceReader.Open(stream, options)); public override ValueTask IsArchiveAsync( Stream stream, diff --git a/src/SharpCompress/Factories/ArcFactory.cs b/src/SharpCompress/Factories/ArcFactory.cs index 37984112..a337798a 100644 --- a/src/SharpCompress/Factories/ArcFactory.cs +++ b/src/SharpCompress/Factories/ArcFactory.cs @@ -48,7 +48,7 @@ namespace SharpCompress.Factories Stream stream, ReaderOptions? options, CancellationToken cancellationToken = default - ) => new(ArcReader.Open(stream, options)); + ) => new((IAsyncReader)ArcReader.Open(stream, options)); public override ValueTask IsArchiveAsync( Stream stream, diff --git a/src/SharpCompress/Factories/ArjFactory.cs b/src/SharpCompress/Factories/ArjFactory.cs index 6e5f7a30..dce8bd94 100644 --- a/src/SharpCompress/Factories/ArjFactory.cs +++ b/src/SharpCompress/Factories/ArjFactory.cs @@ -39,7 +39,7 @@ namespace SharpCompress.Factories Stream stream, ReaderOptions? options, CancellationToken cancellationToken = default - ) => new(ArjReader.Open(stream, options)); + ) => new((IAsyncReader)ArjReader.Open(stream, options)); public override ValueTask IsArchiveAsync( Stream stream, diff --git a/src/SharpCompress/Factories/GZipFactory.cs b/src/SharpCompress/Factories/GZipFactory.cs index 48f5c63e..5707e7eb 100644 --- a/src/SharpCompress/Factories/GZipFactory.cs +++ b/src/SharpCompress/Factories/GZipFactory.cs @@ -160,7 +160,7 @@ public class GZipFactory ) { cancellationToken.ThrowIfCancellationRequested(); - return new(GZipReader.Open(stream, options)); + return new((IAsyncReader)GZipReader.Open(stream, options)); } #endregion diff --git a/src/SharpCompress/Factories/RarFactory.cs b/src/SharpCompress/Factories/RarFactory.cs index fb9e03ab..97e7dd4a 100644 --- a/src/SharpCompress/Factories/RarFactory.cs +++ b/src/SharpCompress/Factories/RarFactory.cs @@ -115,7 +115,7 @@ public class RarFactory : Factory, IArchiveFactory, IMultiArchiveFactory, IReade ) { cancellationToken.ThrowIfCancellationRequested(); - return new(RarReader.Open(stream, options)); + return new((IAsyncReader)RarReader.Open(stream, options)); } #endregion diff --git a/src/SharpCompress/Factories/TarFactory.cs b/src/SharpCompress/Factories/TarFactory.cs index 4e22e0bd..59608cf5 100644 --- a/src/SharpCompress/Factories/TarFactory.cs +++ b/src/SharpCompress/Factories/TarFactory.cs @@ -278,7 +278,7 @@ public class TarFactory ) { cancellationToken.ThrowIfCancellationRequested(); - return new(TarReader.Open(stream, options)); + return new((IAsyncReader)TarReader.Open(stream, options)); } #endregion diff --git a/src/SharpCompress/Factories/ZipFactory.cs b/src/SharpCompress/Factories/ZipFactory.cs index a9e62f14..25465351 100644 --- a/src/SharpCompress/Factories/ZipFactory.cs +++ b/src/SharpCompress/Factories/ZipFactory.cs @@ -202,7 +202,7 @@ public class ZipFactory ) { cancellationToken.ThrowIfCancellationRequested(); - return new(ZipReader.Open(stream, options)); + return new((IAsyncReader)ZipReader.Open(stream, options)); } #endregion diff --git a/src/SharpCompress/Polyfills/AsyncEnumerableExtensions.cs b/src/SharpCompress/Polyfills/AsyncEnumerableExtensions.cs index 785d4c32..c5b1d57c 100644 --- a/src/SharpCompress/Polyfills/AsyncEnumerableExtensions.cs +++ b/src/SharpCompress/Polyfills/AsyncEnumerableExtensions.cs @@ -42,7 +42,7 @@ public static class AsyncEnumerableExtensions return list; } - public async IAsyncEnumerable Cast() + public async IAsyncEnumerable CastAsync() where TResult : class { await foreach (var item in source) @@ -51,7 +51,7 @@ public static class AsyncEnumerableExtensions } } - public async ValueTask All(Func predicate) + public async ValueTask AllAsync(Func predicate) { await foreach (var item in source) { @@ -64,7 +64,7 @@ public static class AsyncEnumerableExtensions return true; } - public async IAsyncEnumerable Where(Func predicate) + public async IAsyncEnumerable WhereAsync(Func predicate) { await foreach (var item in source) { @@ -75,6 +75,16 @@ public static class AsyncEnumerableExtensions } } + public async ValueTask FirstAsync() + { + await foreach (var item in source) + { + return item; // Returns the very first item found + } + throw new InvalidOperationException("The source sequence is empty."); // Throws if the stream is empty + } + + public async ValueTask FirstOrDefaultAsync() { await foreach (var item in source) diff --git a/src/SharpCompress/Readers/Ace/AceReader.cs b/src/SharpCompress/Readers/Ace/AceReader.cs index 9c491bd1..c74ad401 100644 --- a/src/SharpCompress/Readers/Ace/AceReader.cs +++ b/src/SharpCompress/Readers/Ace/AceReader.cs @@ -50,7 +50,7 @@ namespace SharpCompress.Readers.Ace /// The stream containing the ACE archive. /// Reader options. /// An AceReader instance. - public static AceReader Open(Stream stream, ReaderOptions? options = null) + public static IReader Open(Stream stream, ReaderOptions? options = null) { stream.NotNull(nameof(stream)); return new SingleVolumeAceReader(stream, options ?? new ReaderOptions()); @@ -62,7 +62,7 @@ namespace SharpCompress.Readers.Ace /// /// /// - public static AceReader Open(IEnumerable streams, ReaderOptions? options = null) + public static IReader Open(IEnumerable streams, ReaderOptions? options = null) { streams.NotNull(nameof(streams)); return new MultiVolumeAceReader(streams, options ?? new ReaderOptions()); diff --git a/src/SharpCompress/Readers/Arc/ArcReader.cs b/src/SharpCompress/Readers/Arc/ArcReader.cs index 439cdb12..9f1eb68e 100644 --- a/src/SharpCompress/Readers/Arc/ArcReader.cs +++ b/src/SharpCompress/Readers/Arc/ArcReader.cs @@ -22,7 +22,7 @@ namespace SharpCompress.Readers.Arc /// /// /// - public static ArcReader Open(Stream stream, ReaderOptions? options = null) + public static IReader Open(Stream stream, ReaderOptions? options = null) { stream.NotNull(nameof(stream)); return new ArcReader(stream, options ?? new ReaderOptions()); diff --git a/src/SharpCompress/Readers/Arj/ArjReader.cs b/src/SharpCompress/Readers/Arj/ArjReader.cs index 439fb22c..831daf05 100644 --- a/src/SharpCompress/Readers/Arj/ArjReader.cs +++ b/src/SharpCompress/Readers/Arj/ArjReader.cs @@ -27,7 +27,7 @@ namespace SharpCompress.Readers.Arj /// /// /// - public static ArjReader Open(Stream stream, ReaderOptions? options = null) + public static IReader Open(Stream stream, ReaderOptions? options = null) { stream.NotNull(nameof(stream)); return new SingleVolumeArjReader(stream, options ?? new ReaderOptions()); @@ -39,7 +39,7 @@ namespace SharpCompress.Readers.Arj /// /// /// - public static ArjReader Open(IEnumerable streams, ReaderOptions? options = null) + public static IReader Open(IEnumerable streams, ReaderOptions? options = null) { streams.NotNull(nameof(streams)); return new MultiVolumeArjReader(streams, options ?? new ReaderOptions()); diff --git a/src/SharpCompress/Readers/GZip/GZipReader.cs b/src/SharpCompress/Readers/GZip/GZipReader.cs index e10d509a..c1fd8447 100644 --- a/src/SharpCompress/Readers/GZip/GZipReader.cs +++ b/src/SharpCompress/Readers/GZip/GZipReader.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; using SharpCompress.Common; using SharpCompress.Common.GZip; @@ -20,7 +20,7 @@ public class GZipReader : AbstractReader /// /// /// - public static GZipReader Open(Stream stream, ReaderOptions? options = null) + public static IReader Open(Stream stream, ReaderOptions? options = null) { stream.NotNull(nameof(stream)); return new GZipReader(stream, options ?? new ReaderOptions()); diff --git a/src/SharpCompress/Readers/Rar/RarReader.cs b/src/SharpCompress/Readers/Rar/RarReader.cs index 9c6de26f..a3976fe5 100644 --- a/src/SharpCompress/Readers/Rar/RarReader.cs +++ b/src/SharpCompress/Readers/Rar/RarReader.cs @@ -40,24 +40,24 @@ public abstract class RarReader : AbstractReader public override RarVolume? Volume => volume; - public static RarReader Open(string filePath, ReaderOptions? options = null) + public static IReader Open(string filePath, ReaderOptions? options = null) { filePath.NotNullOrEmpty(nameof(filePath)); return Open(new FileInfo(filePath), options); } - public static RarReader Open(FileInfo fileInfo, ReaderOptions? options = null) + public static IReader Open(FileInfo fileInfo, ReaderOptions? options = null) { options ??= new ReaderOptions { LeaveStreamOpen = false }; return Open(fileInfo.OpenRead(), options); } - public static RarReader Open(IEnumerable filePaths, ReaderOptions? options = null) + public static IReader Open(IEnumerable filePaths, ReaderOptions? options = null) { return Open(filePaths.Select(x => new FileInfo(x)), options); } - public static RarReader Open(IEnumerable fileInfos, ReaderOptions? options = null) + public static IReader Open(IEnumerable fileInfos, ReaderOptions? options = null) { options ??= new ReaderOptions { LeaveStreamOpen = false }; return Open(fileInfos.Select(x => x.OpenRead()), options); @@ -69,7 +69,7 @@ public abstract class RarReader : AbstractReader /// /// /// - public static RarReader Open(Stream stream, ReaderOptions? options = null) + public static IReader Open(Stream stream, ReaderOptions? options = null) { stream.NotNull(nameof(stream)); return new SingleVolumeRarReader(stream, options ?? new ReaderOptions()); @@ -81,7 +81,7 @@ public abstract class RarReader : AbstractReader /// /// /// - public static RarReader Open(IEnumerable streams, ReaderOptions? options = null) + public static IReader Open(IEnumerable streams, ReaderOptions? options = null) { streams.NotNull(nameof(streams)); return new MultiVolumeRarReader(streams, options ?? new ReaderOptions()); diff --git a/src/SharpCompress/Readers/Tar/TarReader.cs b/src/SharpCompress/Readers/Tar/TarReader.cs index c9218885..e1375523 100644 --- a/src/SharpCompress/Readers/Tar/TarReader.cs +++ b/src/SharpCompress/Readers/Tar/TarReader.cs @@ -53,7 +53,7 @@ public class TarReader : AbstractReader /// /// /// - public static TarReader Open(Stream stream, ReaderOptions? options = null) + public static IReader Open(Stream stream, ReaderOptions? options = null) { stream.NotNull(nameof(stream)); options = options ?? new ReaderOptions(); diff --git a/src/SharpCompress/Readers/Zip/ZipReader.cs b/src/SharpCompress/Readers/Zip/ZipReader.cs index d15fa7e0..3d9c7acc 100644 --- a/src/SharpCompress/Readers/Zip/ZipReader.cs +++ b/src/SharpCompress/Readers/Zip/ZipReader.cs @@ -45,17 +45,13 @@ public class ZipReader : AbstractReader /// /// /// - public static ZipReader Open(Stream stream, ReaderOptions? options = null) + public static IReader Open(Stream stream, ReaderOptions? options = null) { stream.NotNull(nameof(stream)); return new ZipReader(stream, options ?? new ReaderOptions()); } - public static ZipReader Open( - Stream stream, - ReaderOptions? options, - IEnumerable entries - ) + public static IReader Open(Stream stream, ReaderOptions? options, IEnumerable entries) { stream.NotNull(nameof(stream)); return new ZipReader(stream, options ?? new ReaderOptions(), entries); diff --git a/tests/SharpCompress.Test/GZip/AsyncTests.cs b/tests/SharpCompress.Test/GZip/AsyncTests.cs index 3961ffc6..d324cf6a 100644 --- a/tests/SharpCompress.Test/GZip/AsyncTests.cs +++ b/tests/SharpCompress.Test/GZip/AsyncTests.cs @@ -103,7 +103,7 @@ public class AsyncTests : TestBase #else await using (var stream = File.Create(outputPath)) #endif - using (var writer = WriterFactory.Open(stream, ArchiveType.Zip, CompressionType.Deflate)) + await using (var writer = await WriterFactory.OpenAsync(stream, ArchiveType.Zip, CompressionType.Deflate)) { var testFile = Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz"); @@ -117,8 +117,8 @@ public class AsyncTests : TestBase // Verify the archive was created and contains the entry Assert.True(File.Exists(outputPath)); - await using var archive = ZipArchive.Open(outputPath); - Assert.Single(archive.Entries.Where(e => !e.IsDirectory)); + await using var archive = await ZipArchive.OpenAsync(outputPath); + Assert.Single(await archive.EntriesAsync.WhereAsync(e => !e.IsDirectory).ToListAsync()); } [Fact] diff --git a/tests/SharpCompress.Test/GZip/GZipArchiveAsyncTests.cs b/tests/SharpCompress.Test/GZip/GZipArchiveAsyncTests.cs index caa30ffa..ac86cc8c 100644 --- a/tests/SharpCompress.Test/GZip/GZipArchiveAsyncTests.cs +++ b/tests/SharpCompress.Test/GZip/GZipArchiveAsyncTests.cs @@ -47,9 +47,9 @@ public class GZipArchiveAsyncTests : ArchiveTests #else await using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz"))) #endif - await using (var archive = GZipArchive.Open(stream)) + await using (var archive = await GZipArchive.OpenAsync(stream)) { - var entry = archive.Entries.First(); + var entry = await archive.EntriesAsync.FirstAsync(); await entry.WriteToFileAsync(Path.Combine(SCRATCH_FILES_PATH, entry.Key.NotNull())); var size = entry.Size; @@ -74,8 +74,8 @@ public class GZipArchiveAsyncTests : ArchiveTests #else await using Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz")); #endif - await using var archive = GZipArchive.Open(stream); - Assert.Throws(() => archive.AddEntry("jpg\\test.jpg", jpg)); + await using var archive = await GZipArchive.OpenAsync(stream); + await Assert.ThrowsAsync(() => archive.AddEntry("jpg\\test.jpg", jpg)); await archive.SaveToAsync(Path.Combine(SCRATCH_FILES_PATH, "Tar.tar.gz")); }