mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-02-04 05:25:00 +00:00
Fix ReaderFactory.OpenAsyncReader to use async IsArchiveAsync methods
Co-authored-by: adamhathcock <527620+adamhathcock@users.noreply.github.com>
This commit is contained in:
@@ -24,7 +24,7 @@ public static class ReaderFactory
|
||||
/// <param name="options"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public static IAsyncReader OpenAsyncReader(
|
||||
public static ValueTask<IAsyncReader> OpenAsyncReader(
|
||||
string filePath,
|
||||
ReaderOptions? options = null,
|
||||
CancellationToken cancellationToken = default
|
||||
@@ -47,7 +47,7 @@ public static class ReaderFactory
|
||||
/// <param name="options"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public static IAsyncReader OpenAsyncReader(
|
||||
public static ValueTask<IAsyncReader> OpenAsyncReader(
|
||||
FileInfo fileInfo,
|
||||
ReaderOptions? options = null,
|
||||
CancellationToken cancellationToken = default
|
||||
@@ -110,7 +110,7 @@ public static class ReaderFactory
|
||||
);
|
||||
}
|
||||
|
||||
public static IAsyncReader OpenAsyncReader(
|
||||
public static async ValueTask<IAsyncReader> OpenAsyncReader(
|
||||
Stream stream,
|
||||
ReaderOptions? options = null,
|
||||
CancellationToken cancellationToken = default
|
||||
@@ -136,7 +136,7 @@ public static class ReaderFactory
|
||||
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 +152,7 @@ public static class ReaderFactory
|
||||
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);
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace SharpCompress.Test.Ace
|
||||
{
|
||||
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 @@ namespace SharpCompress.Test.Ace
|
||||
{
|
||||
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 @@ namespace SharpCompress.Test.Ace
|
||||
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())
|
||||
|
||||
@@ -95,7 +95,7 @@ namespace SharpCompress.Test.Arj
|
||||
{
|
||||
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 @@ namespace SharpCompress.Test.Arj
|
||||
{
|
||||
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 @@ namespace SharpCompress.Test.Arj
|
||||
|
||||
private async Task DoMultiReaderAsync(
|
||||
string[] archiveNames,
|
||||
Func<IEnumerable<Stream>, IAsyncReader> openReader
|
||||
Func<IEnumerable<Stream>, ValueTask<IAsyncReader>> openReader
|
||||
)
|
||||
{
|
||||
var testArchives = archiveNames
|
||||
@@ -152,7 +152,7 @@ namespace SharpCompress.Test.Arj
|
||||
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)
|
||||
|
||||
@@ -26,7 +26,7 @@ public class AsyncTests : TestBase
|
||||
#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 class AsyncTests : TestBase
|
||||
#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 class AsyncTests : TestBase
|
||||
#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 class AsyncTests : TestBase
|
||||
#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())
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ public class GZipReaderAsyncTests : ReaderTests
|
||||
{
|
||||
//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 @@ public class GZipReaderAsyncTests : ReaderTests
|
||||
);
|
||||
using var testStream = new TestStream(protectedStream);
|
||||
await using (
|
||||
var reader = ReaderFactory.OpenAsyncReader(
|
||||
var reader = await ReaderFactory.OpenAsyncReader(
|
||||
new AsyncOnlyStream(testStream),
|
||||
options,
|
||||
default
|
||||
|
||||
@@ -541,7 +541,7 @@ public class ProgressReportTests : TestBase
|
||||
var readerOptions = new ReaderOptions { Progress = progress };
|
||||
|
||||
await using (
|
||||
var reader = ReaderFactory.OpenAsyncReader(
|
||||
var reader = await ReaderFactory.OpenAsyncReader(
|
||||
new AsyncOnlyStream(archiveStream),
|
||||
readerOptions
|
||||
)
|
||||
|
||||
@@ -208,7 +208,7 @@ public class RarReaderAsyncTests : ReaderTests
|
||||
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 class RarReaderAsyncTests : ReaderTests
|
||||
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 class RarReaderAsyncTests : ReaderTests
|
||||
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 @@ public class RarReaderAsyncTests : ReaderTests
|
||||
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 @@ public class RarReaderAsyncTests : ReaderTests
|
||||
{
|
||||
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()
|
||||
);
|
||||
|
||||
@@ -146,7 +146,7 @@ public abstract class ReaderTests : TestBase
|
||||
);
|
||||
using var testStream = new TestStream(protectedStream);
|
||||
await using (
|
||||
var reader = ReaderFactory.OpenAsyncReader(
|
||||
var reader = await ReaderFactory.OpenAsyncReader(
|
||||
new AsyncOnlyStream(testStream),
|
||||
options,
|
||||
cancellationToken
|
||||
|
||||
@@ -200,7 +200,7 @@ public class TarArchiveAsyncTests : ArchiveTests
|
||||
{
|
||||
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())
|
||||
|
||||
@@ -23,7 +23,7 @@ public class TarReaderAsyncTests : ReaderTests
|
||||
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 class TarReaderAsyncTests : ReaderTests
|
||||
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 class TarReaderAsyncTests : ReaderTests
|
||||
{
|
||||
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 class TarReaderAsyncTests : ReaderTests
|
||||
{
|
||||
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 class TarReaderAsyncTests : ReaderTests
|
||||
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 }
|
||||
);
|
||||
|
||||
@@ -92,7 +92,7 @@ public class WriterTests : TestBase
|
||||
|
||||
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
|
||||
|
||||
@@ -199,7 +199,7 @@ public class Zip64AsyncTests : WriterTests
|
||||
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 }
|
||||
);
|
||||
|
||||
@@ -20,7 +20,7 @@ public class ZipReaderAsyncTests : ReaderTests
|
||||
{
|
||||
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 class ZipReaderAsyncTests : ReaderTests
|
||||
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 class ZipReaderAsyncTests : ReaderTests
|
||||
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 class ZipReaderAsyncTests : ReaderTests
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user