Fix ReaderFactory.OpenAsyncReader to use async IsArchiveAsync methods

Co-authored-by: adamhathcock <527620+adamhathcock@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-01-16 09:12:54 +00:00
parent 75cc36849b
commit 2906529080
13 changed files with 37 additions and 37 deletions

View File

@@ -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);

View File

@@ -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())

View File

@@ -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)

View File

@@ -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())
{

View File

@@ -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

View File

@@ -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
)

View File

@@ -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()
);

View File

@@ -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

View File

@@ -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())

View File

@@ -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 }
);

View File

@@ -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

View File

@@ -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 }
);

View File

@@ -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)