Files
FileTime2/src/Tools/FileTime.Tools.VirtualDiskSources/VirtualDiskContentReaderFactory.cs
2023-09-15 21:46:17 +02:00

34 lines
1.3 KiB
C#

using DiscUtils.Udf;
using FileTime.Core.ContentAccess;
using FileTime.Core.Models;
namespace FileTime.Tools.VirtualDiskSources;
public sealed class VirtualDiskContentReaderFactory : SubContentReaderBase<VirtualDiskContentProvider>
{
public VirtualDiskContentReaderFactory(IContentAccessorFactory contentAccessorFactory)
: base(contentAccessorFactory)
{
}
public override async Task<IContentReader> CreateContentReaderAsync(IElement element)
{
if (element.Provider is not VirtualDiskContentProvider provider)
throw new ArgumentException(
$"Provider must be {nameof(VirtualDiskContentProvider)}, but it is " + element.Provider.GetType(),
nameof(element));
var parentElementReaderContext = await GetParentElementReaderAsync(element, provider);
var reader = parentElementReaderContext.ContentReader;
var subPath = parentElementReaderContext.SubNativePath;
var readerStream = reader.GetStream();
var discReader = new UdfReader(readerStream);
var fileInfo = discReader.GetFileInfo(subPath.Path);
var contentReader = fileInfo.Open(FileMode.Open, FileAccess.Read);
return new VirtualDiskContentReader(contentReader, new IDisposable[] {discReader, readerStream, contentReader});
}
}