From 9ee6f12b3533f8e3ed8d0573ab127e7060851276 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 5 Sep 2025 03:16:45 +0100 Subject: [PATCH] [AMG] Implement Stat. --- Aaru.Archives/Amg/Files.cs | 41 +++++++++++++++++++++++++++++- Aaru.Archives/Amg/Unimplemented.cs | 4 --- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/Aaru.Archives/Amg/Files.cs b/Aaru.Archives/Amg/Files.cs index 70dc734d1..83a09fa45 100644 --- a/Aaru.Archives/Amg/Files.cs +++ b/Aaru.Archives/Amg/Files.cs @@ -1,6 +1,7 @@ using System; -using System.IO; using Aaru.CommonTypes.Enums; +using Aaru.CommonTypes.Structs; +using FileAttributes = System.IO.FileAttributes; namespace Aaru.Archives; @@ -89,5 +90,43 @@ public sealed partial class Amg return ErrorNumber.NoError; } + /// + public ErrorNumber Stat(int entryNumber, out FileEntryInfo stat) + { + stat = null; + + if(!Opened) return ErrorNumber.NotOpened; + + if(entryNumber < 0 || entryNumber >= _files.Count) return ErrorNumber.OutOfRange; + + FileEntry entry = _files[entryNumber]; + + stat = new FileEntryInfo + { + Attributes = CommonTypes.Structs.FileAttributes.File, + 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.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; + + return ErrorNumber.NoError; + } + #endregion } \ No newline at end of file diff --git a/Aaru.Archives/Amg/Unimplemented.cs b/Aaru.Archives/Amg/Unimplemented.cs index 1a95e1641..4f1532189 100644 --- a/Aaru.Archives/Amg/Unimplemented.cs +++ b/Aaru.Archives/Amg/Unimplemented.cs @@ -1,7 +1,6 @@ using System; using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Interfaces; -using Aaru.CommonTypes.Structs; namespace Aaru.Archives; @@ -9,9 +8,6 @@ public sealed partial class Amg { #region IArchive Members - /// - public ErrorNumber Stat(int entryNumber, out FileEntryInfo stat) => throw new NotImplementedException(); - /// public ErrorNumber GetEntry(int entryNumber, out IFilter filter) => throw new NotImplementedException();