From 46ad76c5d22b7f2bbe8b7cb7fba270149b421f63 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 3 Apr 2024 22:26:23 -0400 Subject: [PATCH] Add flag for long/short SeparatedValue writing --- .../Serializers/SeparatedValue.cs | 168 +++++++++++------- 1 file changed, 105 insertions(+), 63 deletions(-) diff --git a/SabreTools.Serialization/Serializers/SeparatedValue.cs b/SabreTools.Serialization/Serializers/SeparatedValue.cs index 0686897f..d83317d6 100644 --- a/SabreTools.Serialization/Serializers/SeparatedValue.cs +++ b/SabreTools.Serialization/Serializers/SeparatedValue.cs @@ -14,23 +14,23 @@ namespace SabreTools.Serialization.Serializers #region IFileSerializer /// - public static bool SerializeFile(MetadataFile? obj, string? path, char delim = ',') + public static bool SerializeFile(MetadataFile? obj, string? path, char delim = ',', bool longHeader = false) { var serializer = new SeparatedValue(); - return serializer.Serialize(obj, path, delim); + return serializer.Serialize(obj, path, delim, longHeader); } - - /// - public bool Serialize(MetadataFile? obj, string? path) - => Serialize(obj, path, ','); /// - public bool Serialize(MetadataFile? obj, string? path, char delim) + public bool Serialize(MetadataFile? obj, string? path) + => Serialize(obj, path, ',', false); + + /// + public bool Serialize(MetadataFile? obj, string? path, char delim, bool longHeader) { if (string.IsNullOrEmpty(path)) return false; - using var stream = SerializeStream(obj, delim); + using var stream = SerializeStream(obj, delim, longHeader); if (stream == null) return false; @@ -44,25 +44,18 @@ namespace SabreTools.Serialization.Serializers #region IStreamSerializer /// - public static Stream? SerializeStream(MetadataFile? obj) + public static Stream? SerializeStream(MetadataFile? obj, char delim = ',', bool longHeader = false) { var serializer = new SeparatedValue(); - return serializer.Serialize(obj); + return serializer.Serialize(obj, delim, longHeader); } - /// - public static Stream? SerializeStream(MetadataFile? obj, char delim) - { - var serializer = new SeparatedValue(); - return serializer.Serialize(obj, delim); - } - /// public Stream? Serialize(MetadataFile? obj) - => Serialize(obj, ','); + => Serialize(obj, ',', false); /// - public Stream? Serialize(MetadataFile? obj, char delim) + public Stream? Serialize(MetadataFile? obj, char delim, bool longHeader) { // If the metadata file is null if (obj == null) @@ -72,12 +65,11 @@ namespace SabreTools.Serialization.Serializers var stream = new MemoryStream(); var writer = new SeparatedValueWriter(stream, Encoding.UTF8) { Separator = delim, Quotes = true }; - // TODO: Include flag to write out long or short header - // Write the short header - WriteHeader(writer); + // Write the header + WriteHeader(writer, longHeader); // Write out the rows, if they exist - WriteRows(obj.Row, writer); + WriteRows(obj.Row, writer, longHeader); // Return the stream stream.Seek(0, SeekOrigin.Begin); @@ -88,28 +80,53 @@ namespace SabreTools.Serialization.Serializers /// Write header information to the current writer /// /// SeparatedValueWriter representing the output - private static void WriteHeader(SeparatedValueWriter writer) + /// True if the long variant of the row should be written, false otherwise + private static void WriteHeader(SeparatedValueWriter writer, bool longHeader) { - var headerArray = new string?[] + string?[] headerArray; + if (longHeader) { - "File Name", - "Internal Name", - "Description", - "Game Name", - "Game Description", - "Type", - "Rom Name", - "Disk Name", - "Size", - "CRC", - "MD5", - "SHA1", - "SHA256", - //"SHA384", - //"SHA512", - //"SpamSum", - "Status", - }; + headerArray = + [ + "File Name", + "Internal Name", + "Description", + "Game Name", + "Game Description", + "Type", + "Rom Name", + "Disk Name", + "Size", + "CRC", + "MD5", + "SHA1", + "SHA256", + "SHA384", + "SHA512", + "SpamSum", + "Status", + ]; + } + else + { + headerArray = + [ + "File Name", + "Internal Name", + "Description", + "Game Name", + "Game Description", + "Type", + "Rom Name", + "Disk Name", + "Size", + "CRC", + "MD5", + "SHA1", + "SHA256", + "Status", + ]; + } writer.WriteHeader(headerArray); writer.Flush(); @@ -120,7 +137,8 @@ namespace SabreTools.Serialization.Serializers /// /// Array of Row objects representing the rows information /// SeparatedValueWriter representing the output - private static void WriteRows(Row[]? rows, SeparatedValueWriter writer) + /// True if the long variant of the row should be written, false otherwise + private static void WriteRows(Row[]? rows, SeparatedValueWriter writer, bool longHeader) { // If the games information is missing, we can't do anything if (rows == null || !rows.Any()) @@ -129,26 +147,50 @@ namespace SabreTools.Serialization.Serializers // Loop through and write out the rows foreach (var row in rows) { - var rowArray = new string?[] + string?[] rowArray; + if (longHeader) { - row.FileName, - row.InternalName, - row.Description, - row.GameName, - row.GameDescription, - row.Type, - row.RomName, - row.DiskName, - row.Size, - row.CRC, - row.MD5, - row.SHA1, - row.SHA256, - //row.SHA384, - //row.SHA512, - //row.SpamSum, - row.Status, - }; + rowArray = + [ + row.FileName, + row.InternalName, + row.Description, + row.GameName, + row.GameDescription, + row.Type, + row.RomName, + row.DiskName, + row.Size, + row.CRC, + row.MD5, + row.SHA1, + row.SHA256, + row.SHA384, + row.SHA512, + row.SpamSum, + row.Status, + ]; + } + else + { + rowArray = + [ + row.FileName, + row.InternalName, + row.Description, + row.GameName, + row.GameDescription, + row.Type, + row.RomName, + row.DiskName, + row.Size, + row.CRC, + row.MD5, + row.SHA1, + row.SHA256, + row.Status, + ]; + } writer.WriteValues(rowArray); writer.Flush();