Volume size info for sub content providers

This commit is contained in:
2023-09-05 23:12:20 +02:00
parent b998dc5b33
commit ba0b55c733
20 changed files with 92 additions and 41 deletions

View File

@@ -7,6 +7,8 @@ namespace FileTime.Tools.Compression.ContentProvider;
public sealed class CompressedContentProvider : SubContentProviderBase, ICompressedContentProvider
{
private readonly ITimelessContentProvider _timelessContentProvider;
public CompressedContentProvider(
ITimelessContentProvider timelessContentProvider,
IContentAccessorFactory contentAccessorFactory,
@@ -18,6 +20,7 @@ public sealed class CompressedContentProvider : SubContentProviderBase, ICompres
parentContentProvider,
"compression")
{
_timelessContentProvider = timelessContentProvider;
}
public override async Task<byte[]?> GetContentAsync(IElement element, int? maxLength = null, CancellationToken cancellationToken = default)
@@ -25,18 +28,23 @@ public sealed class CompressedContentProvider : SubContentProviderBase, ICompres
var parentElementContext = await GetParentElementReaderAsync(element);
var reader = parentElementContext.ContentReader;
var subPath = parentElementContext.SubNativePath.Path;
await using var readerStream = reader.AsStream();
using var archive = ArchiveFactory.Open(readerStream);
var entry = archive.Entries.First(e => e.Key == subPath);
await using var contentReader= entry.OpenEntryStream();
await using var contentReader = entry.OpenEntryStream();
var data = new byte[1024 * 1024];
var readAsync = await contentReader.ReadAsync(data, cancellationToken);
return data[..readAsync].ToArray();
}
public override VolumeSizeInfo? GetVolumeSizeInfo(FullName path) => throw new NotImplementedException();
public override async ValueTask<VolumeSizeInfo?> GetVolumeSizeInfoAsync(FullName path)
{
var item = await GetItemByFullNameAsync(path, _timelessContentProvider.CurrentPointInTime.Value!);
var parentElement = await GetParentElementAsync(item);
return new VolumeSizeInfo(parentElement.Size, 0);
}
}