From df23235ce8e4a62a49367f282a75f738fe94e4a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81d=C3=A1m=20Kov=C3=A1cs?= Date: Thu, 31 Mar 2022 15:51:19 +0000 Subject: [PATCH] Add Parent to IItem --- .../Models}/Constants.cs | 1 - .../Models/FullName.cs | 15 +++++++++++++- .../FileTime.Core.Abstraction/Models/IItem.cs | 1 + src/Core/FileTime.Core.Models/Container.cs | 1 + src/Core/FileTime.Core.Models/Element.cs | 1 + .../ContentProviderBase.cs | 2 ++ .../LocalContentProvider.cs | 20 +++++++++++++------ 7 files changed, 33 insertions(+), 8 deletions(-) rename src/Core/{FileTime.Core.Models => FileTime.Core.Abstraction/Models}/Constants.cs (66%) diff --git a/src/Core/FileTime.Core.Models/Constants.cs b/src/Core/FileTime.Core.Abstraction/Models/Constants.cs similarity index 66% rename from src/Core/FileTime.Core.Models/Constants.cs rename to src/Core/FileTime.Core.Abstraction/Models/Constants.cs index f8d8aaf..7244ea6 100644 --- a/src/Core/FileTime.Core.Models/Constants.cs +++ b/src/Core/FileTime.Core.Abstraction/Models/Constants.cs @@ -3,6 +3,5 @@ namespace FileTime.Core.Models public static class Constants { public const char SeparatorChar = '/'; - public const string ContentProviderProtocol = "ctp://"; } } \ No newline at end of file diff --git a/src/Core/FileTime.Core.Abstraction/Models/FullName.cs b/src/Core/FileTime.Core.Abstraction/Models/FullName.cs index 128f48d..84840dd 100644 --- a/src/Core/FileTime.Core.Abstraction/Models/FullName.cs +++ b/src/Core/FileTime.Core.Abstraction/Models/FullName.cs @@ -1,4 +1,17 @@ namespace FileTime.Core.Models { - public record FullName(string Path); + public record FullName(string Path) + { + public FullName? GetParent() + { + if (Path is null) return null; + + var pathParts = Path.Split(Constants.SeparatorChar); + return pathParts.Length switch + { + > 1 => new(string.Join(Constants.SeparatorChar, pathParts.SkipLast(1))), + _ => null + }; + } + } } \ No newline at end of file diff --git a/src/Core/FileTime.Core.Abstraction/Models/IItem.cs b/src/Core/FileTime.Core.Abstraction/Models/IItem.cs index a04964c..8a297cf 100644 --- a/src/Core/FileTime.Core.Abstraction/Models/IItem.cs +++ b/src/Core/FileTime.Core.Abstraction/Models/IItem.cs @@ -9,6 +9,7 @@ namespace FileTime.Core.Models string DisplayName { get; } FullName? FullName { get; } NativePath? NativePath { get; } + FullName? Parent { get; } bool IsHidden { get; } bool IsExists { get; } SupportsDelete CanDelete { get; } diff --git a/src/Core/FileTime.Core.Models/Container.cs b/src/Core/FileTime.Core.Models/Container.cs index d0d245f..712f838 100644 --- a/src/Core/FileTime.Core.Models/Container.cs +++ b/src/Core/FileTime.Core.Models/Container.cs @@ -8,6 +8,7 @@ namespace FileTime.Core.Models string DisplayName, FullName FullName, NativePath NativePath, + FullName Parent, bool IsHidden, bool IsExists, SupportsDelete CanDelete, diff --git a/src/Core/FileTime.Core.Models/Element.cs b/src/Core/FileTime.Core.Models/Element.cs index 392ace9..d509be5 100644 --- a/src/Core/FileTime.Core.Models/Element.cs +++ b/src/Core/FileTime.Core.Models/Element.cs @@ -8,6 +8,7 @@ namespace FileTime.Core.Models string DisplayName, FullName FullName, NativePath NativePath, + FullName Parent, bool IsHidden, bool IsExists, SupportsDelete CanDelete, diff --git a/src/Core/FileTime.Core.Services/ContentProviderBase.cs b/src/Core/FileTime.Core.Services/ContentProviderBase.cs index 90c97e4..f110036 100644 --- a/src/Core/FileTime.Core.Services/ContentProviderBase.cs +++ b/src/Core/FileTime.Core.Services/ContentProviderBase.cs @@ -27,6 +27,8 @@ namespace FileTime.Core.Services public IContentProvider Provider => this; + public FullName? Parent => null; + protected ContentProviderBase(string name) { DisplayName = Name = name; diff --git a/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs b/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs index 0f9347f..d9b20fc 100644 --- a/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs +++ b/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs @@ -62,12 +62,15 @@ namespace FileTime.Providers.Local return new AbsolutePath(this, fullName, AbsolutePathType.Element); } - private Container DirectoryToContainer(DirectoryInfo directoryInfo) => - new( + private Container DirectoryToContainer(DirectoryInfo directoryInfo) + { + var fullName = GetFullName(directoryInfo.FullName); + return new( directoryInfo.Name, directoryInfo.Name, - GetFullName(directoryInfo.FullName), + fullName, new(directoryInfo.FullName), + fullName.GetParent()!, (directoryInfo.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden, directoryInfo.Exists, SupportsDelete.True, @@ -75,19 +78,24 @@ namespace FileTime.Providers.Local this, GetItemsByContainer(directoryInfo) ); + } - private Element FileToElement(FileInfo fileInfo) => - new( + private Element FileToElement(FileInfo fileInfo) + { + var fullName = GetFullName(fileInfo); + return new( fileInfo.Name, fileInfo.Name, - GetFullName(fileInfo), + fullName, new(fileInfo.FullName), + fullName.GetParent()!, (fileInfo.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden, fileInfo.Exists, SupportsDelete.True, true, this ); + } private FullName GetFullName(DirectoryInfo directoryInfo) => GetFullName(directoryInfo.FullName); private FullName GetFullName(FileInfo fileInfo) => GetFullName(fileInfo.FullName);