ContentReader for Compressed (+read content for provider)
This commit is contained in:
22
src/Core/FileTime.Core.ContentAccess/Helper.cs
Normal file
22
src/Core/FileTime.Core.ContentAccess/Helper.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
using FileTime.Core.Models;
|
||||
|
||||
namespace FileTime.Core.ContentAccess;
|
||||
|
||||
public record ParentElementReaderContext(IContentReader ContentReader, NativePath SubNativePath);
|
||||
@@ -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);
|
||||
}
|
||||
18
src/Core/FileTime.Core.ContentAccess/SubContentReaderBase.cs
Normal file
18
src/Core/FileTime.Core.ContentAccess/SubContentReaderBase.cs
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user