Skip to content

Commit

Permalink
Fixed permission issue.
Browse files Browse the repository at this point in the history
  • Loading branch information
JunaMeinhold committed Nov 8, 2024
1 parent d4059b6 commit a5b8cd4
Show file tree
Hide file tree
Showing 9 changed files with 241 additions and 149 deletions.
63 changes: 38 additions & 25 deletions Hexa.NET.ImGui.Widgets/Dialogs/FileSystemHelper.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
namespace Hexa.NET.ImGui.Widgets.Dialogs
{
using Hexa.NET.ImGui.Widgets.Extensions;
using Microsoft.CodeAnalysis;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text.Json.Serialization;
using System.Xml.Linq;

[JsonSourceGenerationOptions(GenerationMode = JsonSourceGenerationMode.Serialization)]
[JsonSerializable(typeof(Dictionary<string, string>))]
Expand Down Expand Up @@ -212,7 +214,7 @@ public static IEnumerable<FileSystemItem> Refresh(string folder, RefreshFlags re

var itemName = option == SearchOption.AllDirectories ? $"{name}##{id++}" : name.ToString();
var decorator = isDir ? $"{folderDecorator}" : fileDecorator(metadata);
FileSystemItem item = new(metadata, decorator, itemName, isDir ? FileSystemItemFlags.Folder : FileSystemItemFlags.None);
FileSystemItem item = new(metadata, itemName, decorator, isDir ? FileSystemItemFlags.Folder : FileSystemItemFlags.None);
yield return item;
}
}
Expand All @@ -238,41 +240,52 @@ public static List<FileSystemItem> GetFileSystemEntries(string folder, RefreshFl
throw new ArgumentNullException(nameof(allowedExtensions));
}

foreach (var fse in Directory.GetFileSystemEntries(folder, string.Empty))
try
{
var flags = File.GetAttributes(fse);
if ((flags & FileAttributes.System) != 0)
continue;
if ((flags & FileAttributes.Hidden) != 0)
continue;
if ((flags & FileAttributes.Device) != 0)
continue;

if ((flags & FileAttributes.Directory) != 0)
foreach (var metadata in FileUtilities.EnumerateEntries(folder, string.Empty, SearchOption.TopDirectoryOnly))
{
if (folders)
{
items.Add(new(fse, $"{MaterialIcons.Folder}", FileSystemItemFlags.Folder));
}
var flags = metadata.Attributes;
if ((flags & FileAttributes.System) != 0)
continue;
if ((flags & FileAttributes.Hidden) != 0)
continue;
if ((flags & FileAttributes.Device) != 0)
continue;

continue;
}
else if (files)
{
if (onlyAllowFilteredExtensions)
var span = metadata.Path.AsSpan();
var name = Path.GetFileName(span);

var itemName = name.ToString();

if ((flags & FileAttributes.Directory) != 0)
{
var ext = Path.GetExtension(fse.AsSpan());
if (allowedExtensions!.Contains(ext, StringComparison.OrdinalIgnoreCase))
if (folders)
{
items.Add(new FileSystemItem(fse, string.Empty, FileSystemItemFlags.None));
items.Add(new(metadata, itemName, $"{MaterialIcons.Folder}", FileSystemItemFlags.Folder));
}

continue;
}
else
else if (files)
{
items.Add(new FileSystemItem(fse, string.Empty, FileSystemItemFlags.None));
if (onlyAllowFilteredExtensions)
{
var ext = Path.GetExtension(span);
if (allowedExtensions!.Contains(ext, StringComparison.OrdinalIgnoreCase))
{
items.Add(new FileSystemItem(metadata, itemName, string.Empty, FileSystemItemFlags.None));
}
}
else
{
items.Add(new FileSystemItem(metadata, itemName, string.Empty, FileSystemItemFlags.None));
}
}
}
}
catch
{
}

cache.Add(folder, items);
return items;
Expand Down
112 changes: 41 additions & 71 deletions Hexa.NET.ImGui.Widgets/Dialogs/FileSystemItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,32 +19,61 @@ public struct FileSystemItem : IEquatable<FileSystemItem>, IFileSystemItem
private long size;
private CommonFilePermissions permissions;

public FileSystemItem(string path, string icon, string name, string type, FileSystemItemFlags flags)
public FileSystemItem(string path, string icon, string name, FileSystemItemFlags flags)
{
this.path = path;
this.icon = icon;
this.name = name;
this.flags = flags;
this.type = type;
dateModified = path.TryReturn(File.GetLastWriteTime);

if (IsFile)
{
size = path.TryReturn(FileUtilities.GetFileSize);
type = DetermineFileType(System.IO.Path.GetExtension(path.AsSpan()));
}
else
{
type = "File Folder";
}
}

this.dateModified = File.GetLastWriteTime(path);
public FileSystemItem(FileMetadata metadata, string name, string icon, FileSystemItemFlags flags)
{
path = metadata.Path.ToString();
this.icon = icon;
this.name = name;
this.flags = flags;
dateModified = metadata.LastWriteTime;

if (IsFile)
{
size = new FileInfo(path).Length;
size = metadata.Size;
type = DetermineFileType(System.IO.Path.GetExtension(path.AsSpan()));
}
/*
if (!OperatingSystem.IsWindows())
else
{
var access = File.GetUnixFileMode(path);
if ((access & UnixFileMode.UserExecute) != 0 || (access & UnixFileMode.GroupExecute) != 0 || (access & UnixFileMode.OtherExecute) != 0)
{
}
type = "File Folder";
}
}

public FileSystemItem(string path, string icon, FileSystemItemFlags flags)
{
this.path = path;
this.icon = icon;
name = System.IO.Path.GetFileName(path);
this.flags = flags;

dateModified = path.TryReturn(File.GetLastWriteTime);
if (IsFile)
{
size = path.TryReturn(FileUtilities.GetFileSize);
type = DetermineFileType(System.IO.Path.GetExtension(path.AsSpan()));
}
else
{
FileSecurity security = new(path, AccessControlSections.All);
}*/
type = "File Folder";
}
}

private static CommonFilePermissions ConvertUnixPermissions(UnixFileMode permissions)
Expand Down Expand Up @@ -124,65 +153,6 @@ private static CommonFilePermissions ConvertWindowsPermissions(FileSecurity secu
return result;
}

public FileSystemItem(string path, string icon, string name, FileSystemItemFlags flags)
{
this.path = path;
this.icon = icon;
this.name = name;
this.flags = flags;
this.dateModified = File.GetLastWriteTime(path);

if (IsFile)
{
this.size = FileUtilities.GetFileSize(path);
this.type = DetermineFileType(System.IO.Path.GetExtension(path.AsSpan()));
}
else
{
this.type = "File Folder";
}
}

public FileSystemItem(FileMetadata metadata, string icon, string name, FileSystemItemFlags flags)
{
this.path = metadata.Path.ToString();
this.icon = icon;
this.name = name;
this.flags = flags;
this.dateModified = metadata.LastWriteTime;

if (IsFile)
{
this.size = metadata.Size;
this.type = DetermineFileType(System.IO.Path.GetExtension(path.AsSpan()));
}
else
{
this.type = "File Folder";
}
}

public FileSystemItem(string path, string icon, FileSystemItemFlags flags)
{
this.path = path;
this.icon = icon;
this.name = System.IO.Path.GetFileName(path);
this.flags = flags;

var mode = File.GetAttributes(path);

dateModified = File.GetLastWriteTime(path);
if (IsFile)
{
size = FileUtilities.GetFileSize(path);
type = DetermineFileType(System.IO.Path.GetExtension(path.AsSpan()));
}
else
{
type = "File Folder";
}
}

public readonly bool IsFile => (flags & FileSystemItemFlags.Folder) == 0;

public readonly bool IsFolder => (flags & FileSystemItemFlags.Folder) != 0;
Expand Down
Loading

0 comments on commit a5b8cd4

Please sign in to comment.