Open by path

This commit is contained in:
2022-05-30 17:09:10 +02:00
parent e9ed2c01e6
commit 1a32e97973
12 changed files with 82 additions and 18 deletions

View File

@@ -24,4 +24,5 @@ public interface IContentProvider : IContainer, IOnContainerEnter
NativePath GetNativePath(FullName fullName);
Task<byte[]?> GetContentAsync(IElement element, int? maxLength = null, CancellationToken cancellationToken = default);
bool CanHandlePath(NativePath path);
}

View File

@@ -2,5 +2,5 @@ namespace FileTime.Core.Interactions;
public interface IInputInterface
{
Task<bool> ReadInputs(IEnumerable<IInputElement> fields);
Task<bool> ReadInputs(params IInputElement[] fields);
}

View File

@@ -13,4 +13,6 @@ public interface ITimelessContentProvider
bool forceResolve = false,
AbsolutePathType forceResolvePathType = AbsolutePathType.Unknown,
ItemInitializationSettings itemInitializationSettings = default);
Task<IItem?> GetItemByNativePathAsync(NativePath nativePath, PointInTime? pointInTime = null);
}

View File

@@ -81,4 +81,6 @@ public abstract class ContentProviderBase : IContentProvider
public abstract Task<byte[]?> GetContentAsync(IElement element,
int? maxLength = null,
CancellationToken cancellationToken = default);
public abstract bool CanHandlePath(NativePath path);
}

View File

@@ -2,7 +2,6 @@ using System.Reactive.Subjects;
using FileTime.Core.ContentAccess;
using FileTime.Core.Enums;
using FileTime.Core.Models;
using FileTime.Core.Services;
using Microsoft.Extensions.DependencyInjection;
namespace FileTime.Core.Timeline;
@@ -11,8 +10,7 @@ public class TimelessContentProvider : ITimelessContentProvider
{
private readonly Lazy<List<IContentProvider>> _contentProviders;
public BehaviorSubject<PointInTime> CurrentPointInTime { get; } =
new BehaviorSubject<PointInTime>(PointInTime.Present);
public BehaviorSubject<PointInTime> CurrentPointInTime { get; } = new(PointInTime.Present);
public TimelessContentProvider(IServiceProvider serviceProvider)
{
@@ -36,4 +34,16 @@ public class TimelessContentProvider : ITimelessContentProvider
forceResolve, forceResolvePathType,
itemInitializationSettings);
}
public async Task<IItem?> GetItemByNativePathAsync(NativePath nativePath, PointInTime? pointInTime = null)
{
foreach (var contentProvider in _contentProviders.Value)
{
if(!contentProvider.CanHandlePath(nativePath)) continue;
return await contentProvider.GetItemByNativePathAsync(nativePath, pointInTime ?? PointInTime.Present);
}
return null;
}
}