Refactor, Design, ContextMenu

This commit is contained in:
2022-01-27 10:33:47 +01:00
parent 0025339261
commit 80570d8895
18 changed files with 688 additions and 146 deletions

View File

@@ -8,9 +8,7 @@ namespace FileTime.Providers.Local
{
public class LocalFile : IElement
{
private readonly FileInfo _file;
public FileInfo File => _file;
public FileInfo File { get; }
public string Name { get; }
@@ -18,26 +16,46 @@ namespace FileTime.Providers.Local
public IContentProvider Provider { get; }
public bool IsHidden => (_file.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden;
public bool IsHidden => (File.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden;
public bool IsSpecial =>
RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
&& (new UnixFileInfo(_file.FullName).FileAccessPermissions & FileAccessPermissions.UserExecute) == FileAccessPermissions.UserExecute;
&& (new UnixFileInfo(File.FullName).FileAccessPermissions & FileAccessPermissions.UserExecute) == FileAccessPermissions.UserExecute;
public string Attributes => GetAttributes();
public DateTime CreatedAt => File.CreationTime;
public LocalFile(FileInfo file, IContentProvider contentProvider)
{
_file = file;
File = file;
Name = file.Name;
FullName = file.FullName;
Provider = contentProvider;
}
public string GetPrimaryAttributeText() => _file.Length.ToSizeString();
public string GetPrimaryAttributeText() => File.Length.ToSizeString();
public Task Delete()
{
_file.Delete();
File.Delete();
return Task.CompletedTask;
}
public string GetAttributes()
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
return "";
}
else
{
return "-"
+ ((File.Attributes & FileAttributes.Archive) == FileAttributes.Archive ? "a" : "-")
+ ((File.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly ? "r" : "-")
+ ((File.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden ? "h" : "-")
+ ((File.Attributes & FileAttributes.System) == FileAttributes.System ? "s" : "-");
}
}
}
}

View File

@@ -1,3 +1,4 @@
using System.Runtime.InteropServices;
using AsyncEvent;
using FileTime.Core.Models;
using FileTime.Core.Providers;
@@ -21,6 +22,9 @@ namespace FileTime.Providers.Local
public string FullName { get; }
public AsyncEventHandler Refreshed { get; } = new();
public string Attributes => GetAttributes();
public DateTime CreatedAt => Directory.CreationTime;
public LocalFolder(DirectoryInfo directory, LocalContentProvider contentProvider, IContainer? parent)
{
@@ -111,5 +115,21 @@ namespace FileTime.Providers.Local
Directory.Delete(true);
return Task.CompletedTask;
}
public string GetAttributes()
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
return "";
}
else
{
return "d"
+ ((Directory.Attributes & FileAttributes.Archive) == FileAttributes.Archive ? "a" : "-")
+ ((Directory.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly ? "r" : "-")
+ ((Directory.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden ? "h" : "-")
+ ((Directory.Attributes & FileAttributes.System) == FileAttributes.System ? "s" : "-");
}
}
}
}