[HA] Implement Stat.

This commit is contained in:
2025-09-08 01:54:06 +01:00
parent 22deadb7d0
commit db63df5de9
3 changed files with 52 additions and 9 deletions

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.IO;
using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Enums;
using Aaru.CommonTypes.Structs;
using FileAttributes = System.IO.FileAttributes;
namespace Aaru.Archives; namespace Aaru.Archives;
@@ -89,5 +90,52 @@ public sealed partial class Ha
return ErrorNumber.NoError; return ErrorNumber.NoError;
} }
/// <inheritdoc />
public ErrorNumber Stat(int entryNumber, out FileEntryInfo stat)
{
stat = null;
if(!Opened) return ErrorNumber.NotOpened;
if(entryNumber < 0 || entryNumber >= _entries.Count) return ErrorNumber.OutOfRange;
Entry entry = _entries[entryNumber];
stat = new FileEntryInfo
{
Attributes = CommonTypes.Structs.FileAttributes.None,
Blocks = entry.Uncompressed / 512,
BlockSize = 512,
Length = entry.Uncompressed,
LastWriteTime = entry.LastWrite,
LastWriteTimeUtc = entry.LastWrite
};
if(entry.Uncompressed % 512 != 0) stat.Blocks++;
if(entry.Attributes.HasFlag(FileAttributes.Directory))
stat.Attributes |= CommonTypes.Structs.FileAttributes.Directory;
else
stat.Attributes |= CommonTypes.Structs.FileAttributes.File;
if(entry.Attributes.HasFlag(FileAttributes.Archive))
stat.Attributes |= CommonTypes.Structs.FileAttributes.Archive;
if(entry.Attributes.HasFlag(FileAttributes.Hidden))
stat.Attributes |= CommonTypes.Structs.FileAttributes.Hidden;
if(entry.Attributes.HasFlag(FileAttributes.ReadOnly))
stat.Attributes |= CommonTypes.Structs.FileAttributes.ReadOnly;
if(entry.Attributes.HasFlag(FileAttributes.System))
stat.Attributes |= CommonTypes.Structs.FileAttributes.System;
stat.Mode = entry.Mode;
stat.UID = entry.Uid;
stat.GID = entry.Gid;
return ErrorNumber.NoError;
}
#endregion #endregion
} }

View File

@@ -17,9 +17,9 @@ public sealed partial class Ha
public FileAttributes Attributes; public FileAttributes Attributes;
public long DataOffset; public long DataOffset;
public string Filename; public string Filename;
public ushort Mode; public ushort? Mode;
public ushort Uid; public ushort? Uid;
public ushort Gid; public ushort? Gid;
} }
#endregion #endregion

View File

@@ -1,7 +1,6 @@
using System; using System;
using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Enums;
using Aaru.CommonTypes.Interfaces; using Aaru.CommonTypes.Interfaces;
using Aaru.CommonTypes.Structs;
namespace Aaru.Archives; namespace Aaru.Archives;
@@ -9,10 +8,6 @@ public sealed partial class Ha
{ {
#region IArchive Members #region IArchive Members
/// <inheritdoc />
/// <inheritdoc />
public ErrorNumber Stat(int entryNumber, out FileEntryInfo stat) => throw new NotImplementedException();
/// <inheritdoc /> /// <inheritdoc />
public ErrorNumber GetEntry(int entryNumber, out IFilter filter) => throw new NotImplementedException(); public ErrorNumber GetEntry(int entryNumber, out IFilter filter) => throw new NotImplementedException();