diff --git a/src/SharpCompress/Readers/ReaderFactory.cs b/src/SharpCompress/Readers/ReaderFactory.cs index acd4e96bd..8230bf328 100644 --- a/src/SharpCompress/Readers/ReaderFactory.cs +++ b/src/SharpCompress/Readers/ReaderFactory.cs @@ -24,7 +24,7 @@ public static IReader OpenReader(string filePath, ReaderOptions? options = null) /// /// /// - public static IAsyncReader OpenAsyncReader( + public static ValueTask OpenAsyncReader( string filePath, ReaderOptions? options = null, CancellationToken cancellationToken = default @@ -47,7 +47,7 @@ public static IReader OpenReader(FileInfo fileInfo, ReaderOptions? options = nul /// /// /// - public static IAsyncReader OpenAsyncReader( + public static ValueTask OpenAsyncReader( FileInfo fileInfo, ReaderOptions? options = null, CancellationToken cancellationToken = default @@ -110,7 +110,7 @@ public static IReader OpenReader(Stream stream, ReaderOptions? options = null) ); } - public static IAsyncReader OpenAsyncReader( + public static async ValueTask OpenAsyncReader( Stream stream, ReaderOptions? options = null, CancellationToken cancellationToken = default @@ -136,7 +136,12 @@ public static IAsyncReader OpenAsyncReader( if (testedFactory is IReaderFactory readerFactory) { ((IStreamStack)bStream).StackSeek(pos); - if (testedFactory.IsArchive(bStream)) + if ( + await testedFactory.IsArchiveAsync( + bStream, + cancellationToken: cancellationToken + ) + ) { ((IStreamStack)bStream).StackSeek(pos); return readerFactory.OpenAsyncReader(bStream, options, cancellationToken); @@ -152,7 +157,10 @@ public static IAsyncReader OpenAsyncReader( continue; // Already tested above } ((IStreamStack)bStream).StackSeek(pos); - if (factory is IReaderFactory readerFactory && factory.IsArchive(bStream)) + if ( + factory is IReaderFactory readerFactory + && await factory.IsArchiveAsync(bStream, cancellationToken: cancellationToken) + ) { ((IStreamStack)bStream).StackSeek(pos); return readerFactory.OpenAsyncReader(bStream, options, cancellationToken); diff --git a/tests/SharpCompress.Test/Ace/AceReaderAsyncTests.cs b/tests/SharpCompress.Test/Ace/AceReaderAsyncTests.cs index bb8d9ed46..8bd00503d 100644 --- a/tests/SharpCompress.Test/Ace/AceReaderAsyncTests.cs +++ b/tests/SharpCompress.Test/Ace/AceReaderAsyncTests.cs @@ -68,7 +68,7 @@ private async Task ReadAsync(string testArchive, CompressionType expectedCompres { testArchive = Path.Combine(TEST_ARCHIVES_PATH, testArchive); using Stream stream = File.OpenRead(testArchive); - await using var reader = ReaderFactory.OpenAsyncReader( + await using var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(stream), new ReaderOptions() ); @@ -93,7 +93,7 @@ CompressionType expectedCompression { testArchive = Path.Combine(TEST_ARCHIVES_PATH, testArchive); using Stream stream = File.OpenRead(testArchive); - await using var reader = ReaderFactory.OpenAsyncReader( + await using var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(stream), new ReaderOptions() { LookForHeader = false } ); @@ -119,7 +119,7 @@ private async Task DoMultiReaderAsync(string[] archiveNames) var streams = testArchives.Select(File.OpenRead).ToList(); try { - await using var reader = ReaderFactory.OpenAsyncReader( + await using var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(streams.First()) ); while (await reader.MoveToNextEntryAsync()) diff --git a/tests/SharpCompress.Test/Arj/ArjReaderAsyncTests.cs b/tests/SharpCompress.Test/Arj/ArjReaderAsyncTests.cs index 3bd094a03..b80aaa144 100644 --- a/tests/SharpCompress.Test/Arj/ArjReaderAsyncTests.cs +++ b/tests/SharpCompress.Test/Arj/ArjReaderAsyncTests.cs @@ -95,7 +95,7 @@ private async Task ReadAsync( { testArchive = Path.Combine(TEST_ARCHIVES_PATH, testArchive); using Stream stream = File.OpenRead(testArchive); - await using var reader = ReaderFactory.OpenAsyncReader( + await using var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(stream), new ReaderOptions() ); @@ -123,7 +123,7 @@ CompressionType expectedCompression { testArchive = Path.Combine(TEST_ARCHIVES_PATH, testArchive); using Stream stream = File.OpenRead(testArchive); - await using var reader = ReaderFactory.OpenAsyncReader( + await using var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(stream), new ReaderOptions() { LookForHeader = false } ); @@ -143,7 +143,7 @@ await reader.WriteEntryToDirectoryAsync( private async Task DoMultiReaderAsync( string[] archiveNames, - Func, IAsyncReader> openReader + Func, ValueTask> openReader ) { var testArchives = archiveNames @@ -152,7 +152,7 @@ Func, IAsyncReader> openReader var streams = testArchives.Select(File.OpenRead).ToList(); try { - await using var reader = openReader(streams); + await using var reader = await openReader(streams); while (await reader.MoveToNextEntryAsync()) { if (!reader.Entry.IsDirectory) diff --git a/tests/SharpCompress.Test/GZip/AsyncTests.cs b/tests/SharpCompress.Test/GZip/AsyncTests.cs index fc6109b3e..567c7845c 100644 --- a/tests/SharpCompress.Test/GZip/AsyncTests.cs +++ b/tests/SharpCompress.Test/GZip/AsyncTests.cs @@ -26,7 +26,7 @@ public async ValueTask Reader_Async_Extract_All() #else await using var stream = File.OpenRead(testArchive); #endif - await using var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); + await using var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); await reader.WriteAllToDirectoryAsync( SCRATCH_FILES_PATH, @@ -51,7 +51,7 @@ public async ValueTask Reader_Async_Extract_Single_Entry() #else await using var stream = File.OpenRead(testArchive); #endif - await using var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); + await using var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); while (await reader.MoveToNextEntryAsync()) { @@ -141,7 +141,7 @@ public async ValueTask Async_With_Cancellation_Token() #else await using var stream = File.OpenRead(testArchive); #endif - await using var reader = ReaderFactory.OpenAsyncReader( + await using var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(stream), cancellationToken: cts.Token ); @@ -195,7 +195,7 @@ public async ValueTask EntryStream_ReadAsync_Works() #else await using var stream = File.OpenRead(testArchive); #endif - await using var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); + await using var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); while (await reader.MoveToNextEntryAsync()) { diff --git a/tests/SharpCompress.Test/GZip/GZipReaderAsyncTests.cs b/tests/SharpCompress.Test/GZip/GZipReaderAsyncTests.cs index 8f821805f..afcf3fd54 100644 --- a/tests/SharpCompress.Test/GZip/GZipReaderAsyncTests.cs +++ b/tests/SharpCompress.Test/GZip/GZipReaderAsyncTests.cs @@ -22,7 +22,7 @@ public async ValueTask GZip_Reader_Generic2_Async() { //read only as GZip item using Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz")); - await using var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); + await using var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); while (await reader.MoveToNextEntryAsync()) { Assert.NotEqual(0, reader.Entry.Size); @@ -71,7 +71,7 @@ ReaderOptions options ); using var testStream = new TestStream(protectedStream); await using ( - var reader = ReaderFactory.OpenAsyncReader( + var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(testStream), options, default diff --git a/tests/SharpCompress.Test/ProgressReportTests.cs b/tests/SharpCompress.Test/ProgressReportTests.cs index 805cbcf8f..a26e96cd9 100644 --- a/tests/SharpCompress.Test/ProgressReportTests.cs +++ b/tests/SharpCompress.Test/ProgressReportTests.cs @@ -541,7 +541,7 @@ public async ValueTask Zip_ReadAsync_ReportsProgress() var readerOptions = new ReaderOptions { Progress = progress }; await using ( - var reader = ReaderFactory.OpenAsyncReader( + var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(archiveStream), readerOptions ) diff --git a/tests/SharpCompress.Test/Rar/RarReaderAsyncTests.cs b/tests/SharpCompress.Test/Rar/RarReaderAsyncTests.cs index ce168746d..d81507a93 100644 --- a/tests/SharpCompress.Test/Rar/RarReaderAsyncTests.cs +++ b/tests/SharpCompress.Test/Rar/RarReaderAsyncTests.cs @@ -208,7 +208,7 @@ await ReadAsync( private async ValueTask DoRar_Entry_Stream_Async(string filename) { using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, filename))) - await using (var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream))) + await using (var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream))) { while (await reader.MoveToNextEntryAsync()) { @@ -253,7 +253,7 @@ public async ValueTask Rar_Reader_Audio_program_Async() var stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Rar.Audio_program.rar")) ) await using ( - var reader = ReaderFactory.OpenAsyncReader( + var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(stream), new ReaderOptions { LookForHeader = true } ) @@ -325,7 +325,7 @@ public async ValueTask Rar5_Solid_Skip_Reader_Async() => private async ValueTask DoRar_Solid_Skip_Reader_Async(string filename) { using var stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, filename)); - await using var reader = ReaderFactory.OpenAsyncReader( + await using var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(stream), new ReaderOptions { LookForHeader = true } ); @@ -351,7 +351,7 @@ await reader.WriteEntryToDirectoryAsync( private async ValueTask DoRar_Reader_Skip_Async(string filename) { using var stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, filename)); - await using var reader = ReaderFactory.OpenAsyncReader( + await using var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(stream), new ReaderOptions { LookForHeader = true } ); @@ -376,7 +376,7 @@ private async ValueTask ReadAsync( { testArchive = Path.Combine(TEST_ARCHIVES_PATH, testArchive); using Stream stream = File.OpenRead(testArchive); - await using var reader = ReaderFactory.OpenAsyncReader( + await using var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(stream), readerOptions ?? new ReaderOptions() ); diff --git a/tests/SharpCompress.Test/ReaderTests.cs b/tests/SharpCompress.Test/ReaderTests.cs index 489d87f77..1a7dd5718 100644 --- a/tests/SharpCompress.Test/ReaderTests.cs +++ b/tests/SharpCompress.Test/ReaderTests.cs @@ -146,7 +146,7 @@ private async ValueTask ReadImplAsync( ); using var testStream = new TestStream(protectedStream); await using ( - var reader = ReaderFactory.OpenAsyncReader( + var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(testStream), options, cancellationToken diff --git a/tests/SharpCompress.Test/Tar/TarArchiveAsyncTests.cs b/tests/SharpCompress.Test/Tar/TarArchiveAsyncTests.cs index 5a12507c1..b21fe278f 100644 --- a/tests/SharpCompress.Test/Tar/TarArchiveAsyncTests.cs +++ b/tests/SharpCompress.Test/Tar/TarArchiveAsyncTests.cs @@ -200,7 +200,10 @@ public async ValueTask Tar_Japanese_Name_Async(int length) { var tropt = new ReaderOptions { ArchiveEncoding = enc }; await using ( - var tr = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(inputMemory), tropt) + var tr = await ReaderFactory.OpenAsyncReader( + new AsyncOnlyStream(inputMemory), + tropt + ) ) { while (await tr.MoveToNextEntryAsync()) diff --git a/tests/SharpCompress.Test/Tar/TarReaderAsyncTests.cs b/tests/SharpCompress.Test/Tar/TarReaderAsyncTests.cs index 2f92fe3a9..855aa3a54 100644 --- a/tests/SharpCompress.Test/Tar/TarReaderAsyncTests.cs +++ b/tests/SharpCompress.Test/Tar/TarReaderAsyncTests.cs @@ -23,7 +23,7 @@ public async ValueTask Tar_Skip_Async() using Stream stream = new ForwardOnlyStream( File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar")) ); - await using var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); + await using var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); var x = 0; while (await reader.MoveToNextEntryAsync()) { @@ -73,7 +73,7 @@ public async ValueTask Tar_GZip_OldGnu_Reader_Async() => public async ValueTask Tar_BZip2_Entry_Stream_Async() { using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.bz2"))) - await using (var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream))) + await using (var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream))) { while (await reader.MoveToNextEntryAsync()) { @@ -184,7 +184,7 @@ public async ValueTask Tar_Broken_Stream_Async() { var archiveFullPath = Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar"); using Stream stream = File.OpenRead(archiveFullPath); - await using var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); + await using var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); var memoryStream = new MemoryStream(); Assert.True(await reader.MoveToNextEntryAsync()); @@ -201,7 +201,7 @@ public async ValueTask Tar_Corrupted_Async() { var archiveFullPath = Path.Combine(TEST_ARCHIVES_PATH, "TarCorrupted.tar"); using Stream stream = File.OpenRead(archiveFullPath); - await using var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); + await using var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); var memoryStream = new MemoryStream(); Assert.True(await reader.MoveToNextEntryAsync()); @@ -220,7 +220,7 @@ public async ValueTask Tar_GZip_With_Symlink_Entries_Async() using Stream stream = File.OpenRead( Path.Combine(TEST_ARCHIVES_PATH, "TarWithSymlink.tar.gz") ); - await using var reader = ReaderFactory.OpenAsyncReader( + await using var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(stream), new ReaderOptions { LookForHeader = true } ); diff --git a/tests/SharpCompress.Test/WriterTests.cs b/tests/SharpCompress.Test/WriterTests.cs index 45a41e7f6..1b4e8bea8 100644 --- a/tests/SharpCompress.Test/WriterTests.cs +++ b/tests/SharpCompress.Test/WriterTests.cs @@ -92,7 +92,7 @@ await writer.WriteAllAsync( readerOptions.ArchiveEncoding.Default = encoding ?? Encoding.Default; - await using var reader = ReaderFactory.OpenAsyncReader( + await using var reader = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(SharpCompressStream.Create(stream, leaveOpen: true)), readerOptions, cancellationToken diff --git a/tests/SharpCompress.Test/Zip/Zip64AsyncTests.cs b/tests/SharpCompress.Test/Zip/Zip64AsyncTests.cs index cd9fe18d2..fbdb1ce62 100644 --- a/tests/SharpCompress.Test/Zip/Zip64AsyncTests.cs +++ b/tests/SharpCompress.Test/Zip/Zip64AsyncTests.cs @@ -199,7 +199,7 @@ public async ValueTask> ReadForwardOnlyAsync(string filename) ZipEntry? prev = null; using (var fs = File.OpenRead(filename)) { - var rd = ReaderFactory.OpenAsyncReader( + var rd = await ReaderFactory.OpenAsyncReader( new AsyncOnlyStream(fs), new ReaderOptions { LookForHeader = false } ); diff --git a/tests/SharpCompress.Test/Zip/ZipReaderAsyncTests.cs b/tests/SharpCompress.Test/Zip/ZipReaderAsyncTests.cs index 3aec7ea9d..c1854598b 100644 --- a/tests/SharpCompress.Test/Zip/ZipReaderAsyncTests.cs +++ b/tests/SharpCompress.Test/Zip/ZipReaderAsyncTests.cs @@ -20,7 +20,7 @@ public async ValueTask Issue_269_Double_Skip_Async() { var path = Path.Combine(TEST_ARCHIVES_PATH, "PrePostHeaders.zip"); using Stream stream = new ForwardOnlyStream(File.OpenRead(path)); - await using var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); + await using var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); var count = 0; while (await reader.MoveToNextEntryAsync()) { @@ -65,7 +65,7 @@ public async ValueTask Zip_Deflate_Streamed_Skip_Async() using Stream stream = new ForwardOnlyStream( File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Zip.deflate.dd.zip")) ); - await using var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); + await using var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); var x = 0; while (await reader.MoveToNextEntryAsync()) { @@ -150,7 +150,7 @@ public async ValueTask Zip_Reader_Disposal_Test_Async() using var stream = new TestStream( File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Zip.deflate.dd.zip")) ); - await using (var reader = ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream))) + await using (var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream))) { while (await reader.MoveToNextEntryAsync()) { @@ -174,7 +174,7 @@ public async ValueTask Zip_Reader_Disposal_Test2_Async() File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Zip.deflate.dd.zip")) ) ); - await using var reader = ReaderFactory.OpenAsyncReader(stream); + await using var reader = await ReaderFactory.OpenAsyncReader(stream); while (await reader.MoveToNextEntryAsync()) { if (!reader.Entry.IsDirectory)