ContentReader for Compressed (+read content for provider)
This commit is contained in:
@@ -4,37 +4,28 @@ using FileTime.Core.Models;
|
||||
|
||||
namespace FileTime.Tools.VirtualDiskSources;
|
||||
|
||||
public class VirtualDiskContentReaderFactory : IContentReaderFactory<VirtualDiskContentProvider>
|
||||
public sealed class VirtualDiskContentReaderFactory : SubContentReaderBase<VirtualDiskContentProvider>
|
||||
{
|
||||
private readonly IContentAccessorFactory _contentAccessorFactory;
|
||||
|
||||
public VirtualDiskContentReaderFactory(IContentAccessorFactory contentAccessorFactory)
|
||||
public VirtualDiskContentReaderFactory(IContentAccessorFactory contentAccessorFactory)
|
||||
: base(contentAccessorFactory)
|
||||
{
|
||||
_contentAccessorFactory = contentAccessorFactory;
|
||||
}
|
||||
|
||||
public async Task<IContentReader> CreateContentReaderAsync(IElement element)
|
||||
public override async Task<IContentReader> CreateContentReaderAsync(IElement element)
|
||||
{
|
||||
if (element.Provider is not VirtualDiskContentProvider provider)
|
||||
throw new ArgumentException(
|
||||
"Provider must be VirtualDiskContentProvider, but it is " + element.Provider.GetType(),
|
||||
$"Provider must be {nameof(VirtualDiskContentProvider)}, but it is " + element.Provider.GetType(),
|
||||
nameof(element));
|
||||
|
||||
var elementNativePath = element.NativePath!;
|
||||
|
||||
var supportedPath = (await provider.ParentContentProvider.GetSupportedPathPart(elementNativePath))!;
|
||||
|
||||
var parentElement = (IElement) await provider.ParentContentProvider.GetItemByNativePathAsync(supportedPath, element.PointInTime);
|
||||
|
||||
|
||||
var contentReaderFactory = _contentAccessorFactory.GetContentReaderFactory(parentElement.Provider);
|
||||
var reader = await contentReaderFactory.CreateContentReaderAsync(parentElement);
|
||||
|
||||
var parentElementReaderContext = await GetParentElementReaderAsync(element, provider);
|
||||
var reader = parentElementReaderContext.ContentReader;
|
||||
var subPath = parentElementReaderContext.SubNativePath;
|
||||
|
||||
var readerStream = reader.AsStream();
|
||||
var discReader = new UdfReader(readerStream);
|
||||
|
||||
var subPath = elementNativePath.Path.Substring(supportedPath.Path.Length + 2 + Constants.SubContentProviderRootContainer.Length);
|
||||
var fileInfo = discReader.GetFileInfo(subPath);
|
||||
var fileInfo = discReader.GetFileInfo(subPath.Path);
|
||||
|
||||
var contentReader = fileInfo.Open(FileMode.Open, FileAccess.Read);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user