Files
FileTime2/src/Core/FileTime.Core.Abstraction/Models/AbsolutePath.cs
2023-09-04 15:19:20 +02:00

61 lines
1.9 KiB
C#

using System.Diagnostics;
using FileTime.Core.Enums;
using FileTime.Core.Timeline;
namespace FileTime.Core.Models;
[DebuggerDisplay("{Path.Path}, {Type}")]
public class AbsolutePath
{
public ITimelessContentProvider TimelessProvider { get; }
public PointInTime PointInTime { get; }
public FullName Path { get; }
public AbsolutePathType Type { get; }
public AbsolutePath(
ITimelessContentProvider timelessProvider,
PointInTime pointInTime,
FullName path,
AbsolutePathType type)
{
TimelessProvider = timelessProvider;
Path = path;
Type = type;
PointInTime = pointInTime;
}
public AbsolutePath(ITimelessContentProvider timelessProvider, IItem item)
{
TimelessProvider = timelessProvider;
PointInTime = item.PointInTime;
Path = item.FullName ?? throw new ArgumentException($"{nameof(item.FullName)} can not be null.", nameof(item));
Type = item.Type;
}
public async Task<IItem> ResolveAsync(bool forceResolve = false,
ItemInitializationSettings itemInitializationSettings = default)
{
return await TimelessProvider.GetItemByFullNameAsync(Path, PointInTime, forceResolve, Type,
itemInitializationSettings);
}
public async Task<IItem?> ResolveAsyncSafe(bool forceResolve = false,
ItemInitializationSettings itemInitializationSettings = default)
{
try
{
return await ResolveAsync(forceResolve, itemInitializationSettings);
}
catch
{
return null;
}
}
public AbsolutePath GetChild(string childName, AbsolutePathType type)
=> new (TimelessProvider, PointInTime, Path.GetChild(childName), type);
public AbsolutePath? GetParent()
=> Path.GetParent() is { } parentFullName ? new (TimelessProvider, PointInTime, parentFullName, AbsolutePathType.Container) : null;
}