ContentReader for Compressed (+read content for provider)

This commit is contained in:
2023-09-05 22:24:25 +02:00
parent e6fd8d4ab5
commit def5ece688
15 changed files with 195 additions and 57 deletions

View File

@@ -0,0 +1,22 @@
using FileTime.Core.Models;
namespace FileTime.Core.ContentAccess;
internal static class Helper
{
internal static async Task<ParentElementReaderContext> GetParentElementReaderAsync(
IContentAccessorFactory contentAccessorFactory,
IElement element,
IContentProvider parentContentProvider)
{
var elementNativePath = element.NativePath!;
var supportedPath = (await parentContentProvider.GetSupportedPathPart(elementNativePath))!;
var parentElement = (IElement) await parentContentProvider.GetItemByNativePathAsync(supportedPath, element.PointInTime);
var contentReaderFactory = contentAccessorFactory.GetContentReaderFactory(parentElement.Provider);
var reader = await contentReaderFactory.CreateContentReaderAsync(parentElement);
var subPath = new NativePath(elementNativePath.Path.Substring(supportedPath.Path.Length + 2 + Constants.SubContentProviderRootContainer.Length));
return new ParentElementReaderContext(reader, subPath);
}
}

View File

@@ -0,0 +1,5 @@
using FileTime.Core.Models;
namespace FileTime.Core.ContentAccess;
public record ParentElementReaderContext(IContentReader ContentReader, NativePath SubNativePath);

View File

@@ -6,13 +6,18 @@ namespace FileTime.Core.ContentAccess;
public abstract class SubContentProviderBase : ContentProviderBase
{
private readonly IContentAccessorFactory _contentAccessorFactory;
public IContentProvider ParentContentProvider { get; }
protected SubContentProviderBase(
ITimelessContentProvider timelessContentProvider,
IContentAccessorFactory contentAccessorFactory,
IContentProvider parentContentProvider,
string name,
ITimelessContentProvider timelessContentProvider) : base(name, timelessContentProvider)
string name
) : base(name, timelessContentProvider)
{
_contentAccessorFactory = contentAccessorFactory;
ParentContentProvider = parentContentProvider;
}
@@ -40,4 +45,7 @@ public abstract class SubContentProviderBase : ContentProviderBase
public override async ValueTask<NativePath?> GetSupportedPathPart(NativePath nativePath)
=> await ParentContentProvider.GetSupportedPathPart(nativePath);
protected async Task<ParentElementReaderContext> GetParentElementReaderAsync(IElement element)
=> await Helper.GetParentElementReaderAsync(_contentAccessorFactory, element, ParentContentProvider);
}

View File

@@ -0,0 +1,18 @@
using FileTime.Core.Models;
namespace FileTime.Core.ContentAccess;
public abstract class SubContentReaderBase<TContentProvider> : IContentReaderFactory<TContentProvider> where TContentProvider : IContentProvider
{
private readonly IContentAccessorFactory _contentAccessorFactory;
protected SubContentReaderBase(IContentAccessorFactory contentAccessorFactory)
{
_contentAccessorFactory = contentAccessorFactory;
}
public abstract Task<IContentReader> CreateContentReaderAsync(IElement element);
protected async Task<ParentElementReaderContext> GetParentElementReaderAsync(IElement element, SubContentProviderBase provider)
=> await Helper.GetParentElementReaderAsync(_contentAccessorFactory, element, provider.ParentContentProvider);
}