From c300058d82f1ec3c65468f8bca9280925a240cb8 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 12 Oct 2025 11:20:58 +0100 Subject: [PATCH] [AaruFormat] Implement SetMetadata. --- Aaru.Images/AaruFormat/Metadata.cs | 30 +++++++++++++++++++++++++ Aaru.Images/AaruFormat/Unimplemented.cs | 2 -- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Aaru.Images/AaruFormat/Metadata.cs b/Aaru.Images/AaruFormat/Metadata.cs index a673b936f..35860ef1d 100644 --- a/Aaru.Images/AaruFormat/Metadata.cs +++ b/Aaru.Images/AaruFormat/Metadata.cs @@ -1,11 +1,36 @@ using System; +using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using System.Text.Json; +using Aaru.CommonTypes.AaruMetadata; namespace Aaru.Images; public sealed partial class AaruFormat { +#region IWritableOpticalImage Members + + /// + public bool SetMetadata(Metadata metadata) + { + var jsonMs = new MemoryStream(); + + JsonSerializer.Serialize(jsonMs, + new MetadataJson + { + AaruMetadata = AaruMetadata + }, + typeof(MetadataJson), + MetadataJsonContext.Default); + + byte[] buffer = jsonMs.ToArray(); + + return aaruf_set_aaru_json_metadata(_context, buffer, (ulong)buffer.Length) == Status.Ok; + } + +#endregion + // AARU_EXPORT int32_t AARU_CALL aaruf_get_image_info(const void *context, ImageInfo *image_info) [DllImport("libaaruformat", EntryPoint = "aaruf_get_image_info", @@ -86,4 +111,9 @@ public sealed partial class AaruFormat [UnmanagedCallConv(CallConvs = [typeof(CallConvStdcall)])] private static partial Status aaruf_get_geometry(IntPtr context, out uint cylinders, out uint heads, out uint sectorsPerTrack); + + // AARU_EXPORT int32_t AARU_CALL aaruf_set_aaru_json_metadata(void *context, uint8_t *data, size_t length) + [LibraryImport("libaaruformat", EntryPoint = "aaruf_set_aaru_json_metadata", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvStdcall)])] + private static partial Status aaruf_set_aaru_json_metadata(IntPtr context, [In] byte[] data, ulong length); } \ No newline at end of file diff --git a/Aaru.Images/AaruFormat/Unimplemented.cs b/Aaru.Images/AaruFormat/Unimplemented.cs index c398410b6..44e2571b0 100644 --- a/Aaru.Images/AaruFormat/Unimplemented.cs +++ b/Aaru.Images/AaruFormat/Unimplemented.cs @@ -25,8 +25,6 @@ public sealed partial class AaruFormat public bool Create(string path, MediaType mediaType, Dictionary options, ulong sectors, uint sectorSize) => throw new NotImplementedException(); - /// - public bool SetMetadata(Metadata metadata) => throw new NotImplementedException(); /// public bool SetDumpHardware(List dumpHardware) => throw new NotImplementedException();