From 1249900e58605ec14349ae41a4b71cb3c1693622 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 9 Aug 2023 22:35:51 -0400 Subject: [PATCH] Move Hashfile internal serialization --- .../Hashfile.Deserializer.cs | 167 ++++++++- .../Hashfile.Serializer.cs | 148 ++++++++ SabreTools.Serialization/Internal.Hashfile.cs | 353 ------------------ 3 files changed, 301 insertions(+), 367 deletions(-) delete mode 100644 SabreTools.Serialization/Internal.Hashfile.cs diff --git a/SabreTools.Serialization/Hashfile.Deserializer.cs b/SabreTools.Serialization/Hashfile.Deserializer.cs index 54261d1d..f434857e 100644 --- a/SabreTools.Serialization/Hashfile.Deserializer.cs +++ b/SabreTools.Serialization/Hashfile.Deserializer.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using SabreTools.Core; +using SabreTools.Models.Hashfile; namespace SabreTools.Serialization { @@ -54,7 +55,7 @@ namespace SabreTools.Serialization switch (hash) { case Hash.CRC: - var sfv = new Models.Hashfile.SFV + var sfv = new SFV { File = string.Join(" ", lineParts[..^1]), Hash = string.Join(" ", lineParts[^1]), @@ -62,7 +63,7 @@ namespace SabreTools.Serialization hashes.Add(sfv); break; case Hash.MD5: - var md5 = new Models.Hashfile.MD5 + var md5 = new MD5 { Hash = lineParts[0], File = string.Join(" ", lineParts[1..]), @@ -70,7 +71,7 @@ namespace SabreTools.Serialization hashes.Add(md5); break; case Hash.SHA1: - var sha1 = new Models.Hashfile.SHA1 + var sha1 = new SHA1 { Hash = lineParts[0], File = string.Join(" ", lineParts[1..]), @@ -78,7 +79,7 @@ namespace SabreTools.Serialization hashes.Add(sha1); break; case Hash.SHA256: - var sha256 = new Models.Hashfile.SHA256 + var sha256 = new SHA256 { Hash = lineParts[0], File = string.Join(" ", lineParts[1..]), @@ -86,7 +87,7 @@ namespace SabreTools.Serialization hashes.Add(sha256); break; case Hash.SHA384: - var sha384 = new Models.Hashfile.SHA384 + var sha384 = new SHA384 { Hash = lineParts[0], File = string.Join(" ", lineParts[1..]), @@ -94,7 +95,7 @@ namespace SabreTools.Serialization hashes.Add(sha384); break; case Hash.SHA512: - var sha512 = new Models.Hashfile.SHA512 + var sha512 = new SHA512 { Hash = lineParts[0], File = string.Join(" ", lineParts[1..]), @@ -102,7 +103,7 @@ namespace SabreTools.Serialization hashes.Add(sha512); break; case Hash.SpamSum: - var spamSum = new Models.Hashfile.SpamSum + var spamSum = new SpamSum { Hash = lineParts[0], File = string.Join(" ", lineParts[1..]), @@ -116,29 +117,167 @@ namespace SabreTools.Serialization switch (hash) { case Hash.CRC: - dat.SFV = hashes.Cast().ToArray(); + dat.SFV = hashes.Cast().ToArray(); break; case Hash.MD5: - dat.MD5 = hashes.Cast().ToArray(); + dat.MD5 = hashes.Cast().ToArray(); break; case Hash.SHA1: - dat.SHA1 = hashes.Cast().ToArray(); + dat.SHA1 = hashes.Cast().ToArray(); break; case Hash.SHA256: - dat.SHA256 = hashes.Cast().ToArray(); + dat.SHA256 = hashes.Cast().ToArray(); break; case Hash.SHA384: - dat.SHA384 = hashes.Cast().ToArray(); + dat.SHA384 = hashes.Cast().ToArray(); break; case Hash.SHA512: - dat.SHA512 = hashes.Cast().ToArray(); + dat.SHA512 = hashes.Cast().ToArray(); break; case Hash.SpamSum: - dat.SpamSum = hashes.Cast().ToArray(); + dat.SpamSum = hashes.Cast().ToArray(); break; } dat.ADDITIONAL_ELEMENTS = additional.ToArray(); return dat; } + + // TODO: Add deserialization of entire Hashfile + #region Internal + + /// + /// Convert from to + /// + public static Models.Hashfile.Hashfile? ConvertMachineToInternalModel(Models.Internal.Machine? item, Hash hash) + { + if (item == null) + return null; + + var roms = item.Read(Models.Internal.Machine.RomKey); + return new Models.Hashfile.Hashfile + { + SFV = hash == Hash.CRC ? roms?.Select(ConvertToSFV)?.ToArray() : null, + MD5 = hash == Hash.MD5 ? roms?.Select(ConvertToMD5)?.ToArray() : null, + SHA1 = hash == Hash.SHA1 ? roms?.Select(ConvertToSHA1)?.ToArray() : null, + SHA256 = hash == Hash.SHA256 ? roms?.Select(ConvertToSHA256)?.ToArray() : null, + SHA384 = hash == Hash.SHA384 ? roms?.Select(ConvertToSHA384)?.ToArray() : null, + SHA512 = hash == Hash.SHA512 ? roms?.Select(ConvertToSHA512)?.ToArray() : null, + SpamSum = hash == Hash.SpamSum ? roms?.Select(ConvertToSpamSum)?.ToArray() : null, + }; + } + + /// + /// Convert from to + /// + private static MD5? ConvertToMD5(Models.Internal.Rom? item) + { + if (item == null) + return null; + + var md5 = new MD5 + { + Hash = item.ReadString(Models.Internal.Rom.MD5Key), + File = item.ReadString(Models.Internal.Rom.NameKey), + }; + return md5; + } + + /// + /// Convert from to + /// + private static SFV? ConvertToSFV(Models.Internal.Rom? item) + { + if (item == null) + return null; + + var sfv = new SFV + { + File = item.ReadString(Models.Internal.Rom.NameKey), + Hash = item.ReadString(Models.Internal.Rom.CRCKey), + }; + return sfv; + } + + /// + /// Convert from to + /// + private static SHA1? ConvertToSHA1(Models.Internal.Rom? item) + { + if (item == null) + return null; + + var sha1 = new SHA1 + { + Hash = item.ReadString(Models.Internal.Rom.SHA1Key), + File = item.ReadString(Models.Internal.Rom.NameKey), + }; + return sha1; + } + + /// + /// Convert from to + /// + private static SHA256? ConvertToSHA256(Models.Internal.Rom? item) + { + if (item == null) + return null; + + var sha256 = new SHA256 + { + Hash = item.ReadString(Models.Internal.Rom.SHA256Key), + File = item.ReadString(Models.Internal.Rom.NameKey), + }; + return sha256; + } + + /// + /// Convert from to + /// + private static SHA384? ConvertToSHA384(Models.Internal.Rom? item) + { + if (item == null) + return null; + + var sha384 = new SHA384 + { + Hash = item.ReadString(Models.Internal.Rom.SHA384Key), + File = item.ReadString(Models.Internal.Rom.NameKey), + }; + return sha384; + } + + /// + /// Convert from to + /// + private static SHA512? ConvertToSHA512(Models.Internal.Rom? item) + { + if (item == null) + return null; + + var sha512 = new SHA512 + { + Hash = item.ReadString(Models.Internal.Rom.SHA512Key), + File = item.ReadString(Models.Internal.Rom.NameKey), + }; + return sha512; + } + + /// + /// Convert from to + /// + private static SpamSum? ConvertToSpamSum(Models.Internal.Rom? item) + { + if (item == null) + return null; + + var spamsum = new SpamSum + { + Hash = item.ReadString(Models.Internal.Rom.SpamSumKey), + File = item.ReadString(Models.Internal.Rom.NameKey), + }; + return spamsum; + } + + #endregion } } \ No newline at end of file diff --git a/SabreTools.Serialization/Hashfile.Serializer.cs b/SabreTools.Serialization/Hashfile.Serializer.cs index fb189b86..9a0b0d40 100644 --- a/SabreTools.Serialization/Hashfile.Serializer.cs +++ b/SabreTools.Serialization/Hashfile.Serializer.cs @@ -217,5 +217,153 @@ namespace SabreTools.Serialization writer.Flush(); } } + + #region Internal + + /// + /// Convert from to + /// + public static Models.Internal.MetadataFile ConvertToInternalModel(Models.Hashfile.Hashfile item) + { + var metadataFile = new Models.Internal.MetadataFile + { + [Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), + }; + + var machine = ConvertMachineToInternalModel(item); + metadataFile[Models.Internal.MetadataFile.MachineKey] = new Models.Internal.Machine[] { machine }; + + return metadataFile; + } + + /// + /// Convert from to + /// + private static Models.Internal.Header ConvertHeaderToInternalModel(Models.Hashfile.Hashfile item) + { + var header = new Models.Internal.Header + { + [Models.Internal.Header.NameKey] = "Hashfile", + }; + return header; + } + + /// + /// Convert from to + /// + private static Models.Internal.Machine ConvertMachineToInternalModel(Models.Hashfile.Hashfile item) + { + var machine = new Models.Internal.Machine(); + + if (item.SFV != null && item.SFV.Any()) + machine[Models.Internal.Machine.RomKey] = item.SFV.Select(ConvertToInternalModel).ToArray(); + else if (item.MD5 != null && item.MD5.Any()) + machine[Models.Internal.Machine.RomKey] = item.MD5.Select(ConvertToInternalModel).ToArray(); + else if (item.SHA1 != null && item.SHA1.Any()) + machine[Models.Internal.Machine.RomKey] = item.SHA1.Select(ConvertToInternalModel).ToArray(); + else if (item.SHA256 != null && item.SHA256.Any()) + machine[Models.Internal.Machine.RomKey] = item.SHA256.Select(ConvertToInternalModel).ToArray(); + else if (item.SHA384 != null && item.SHA384.Any()) + machine[Models.Internal.Machine.RomKey] = item.SHA384.Select(ConvertToInternalModel).ToArray(); + else if (item.SHA512 != null && item.SHA512.Any()) + machine[Models.Internal.Machine.RomKey] = item.SHA512.Select(ConvertToInternalModel).ToArray(); + else if (item.SpamSum != null && item.SpamSum.Any()) + machine[Models.Internal.Machine.RomKey] = item.SpamSum.Select(ConvertToInternalModel).ToArray(); + + return machine; + } + + /// + /// Convert from to + /// + private static Models.Internal.Rom ConvertToInternalModel(MD5 item) + { + var rom = new Models.Internal.Rom + { + [Models.Internal.Rom.MD5Key] = item.Hash, + [Models.Internal.Rom.NameKey] = item.File, + }; + return rom; + } + + /// + /// Convert from to + /// + private static Models.Internal.Rom ConvertToInternalModel(SFV item) + { + var rom = new Models.Internal.Rom + { + [Models.Internal.Rom.NameKey] = item.File, + [Models.Internal.Rom.CRCKey] = item.Hash, + }; + return rom; + } + + /// + /// Convert from to + /// + private static Models.Internal.Rom ConvertToInternalModel(SHA1 item) + { + var rom = new Models.Internal.Rom + { + [Models.Internal.Rom.SHA1Key] = item.Hash, + [Models.Internal.Rom.NameKey] = item.File, + }; + return rom; + } + + /// + /// Convert from to + /// + private static Models.Internal.Rom ConvertToInternalModel(SHA256 item) + { + var rom = new Models.Internal.Rom + { + [Models.Internal.Rom.SHA256Key] = item.Hash, + [Models.Internal.Rom.NameKey] = item.File, + }; + return rom; + } + + /// + /// Convert from to + /// + private static Models.Internal.Rom ConvertToInternalModel(SHA384 item) + { + var rom = new Models.Internal.Rom + { + [Models.Internal.Rom.SHA384Key] = item.Hash, + [Models.Internal.Rom.NameKey] = item.File, + }; + return rom; + } + + /// + /// Convert from to + /// + private static Models.Internal.Rom ConvertToInternalModel(SHA512 item) + { + var rom = new Models.Internal.Rom + { + [Models.Internal.Rom.SHA512Key] = item.Hash, + [Models.Internal.Rom.NameKey] = item.File, + }; + return rom; + } + + /// + /// Convert from to + /// + private static Models.Internal.Rom ConvertToInternalModel(SpamSum item) + { + var rom = new Models.Internal.Rom + { + [Models.Internal.Rom.SpamSumKey] = item.Hash, + [Models.Internal.Rom.NameKey] = item.File, + }; + return rom; + } + + #endregion } } \ No newline at end of file diff --git a/SabreTools.Serialization/Internal.Hashfile.cs b/SabreTools.Serialization/Internal.Hashfile.cs deleted file mode 100644 index 22f204d5..00000000 --- a/SabreTools.Serialization/Internal.Hashfile.cs +++ /dev/null @@ -1,353 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using SabreTools.Core; -using SabreTools.Models.Internal; - -namespace SabreTools.Serialization -{ - /// - /// Serializer for Hashfile models to internal structure - /// - public partial class Internal - { - #region Serialize - - /// - /// Convert from to - /// - public static MetadataFile ConvertToInternalModel(Models.Hashfile.Hashfile item) - { - var metadataFile = new MetadataFile - { - [MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), - }; - - var machine = ConvertMachineToInternalModel(item); - metadataFile[MetadataFile.MachineKey] = new Machine[] { machine }; - - return metadataFile; - } - - /// - /// Convert from to - /// - private static Header ConvertHeaderToInternalModel(Models.Hashfile.Hashfile item) - { - var header = new Header - { - [Header.NameKey] = "Hashfile", - }; - return header; - } - - /// - /// Convert from to - /// - private static Machine ConvertMachineToInternalModel(Models.Hashfile.Hashfile item) - { - var machine = new Machine(); - - if (item.SFV != null && item.SFV.Any()) - { - var roms = new List(); - foreach (var sfv in item.SFV) - { - roms.Add(ConvertToInternalModel(sfv)); - } - machine[Machine.RomKey] = roms.ToArray(); - } - - else if (item.MD5 != null && item.MD5.Any()) - { - var roms = new List(); - foreach (var md5 in item.MD5) - { - roms.Add(ConvertToInternalModel(md5)); - } - machine[Machine.RomKey] = roms.ToArray(); - } - - else if (item.SHA1 != null && item.SHA1.Any()) - { - var roms = new List(); - foreach (var sha1 in item.SHA1) - { - roms.Add(ConvertToInternalModel(sha1)); - } - machine[Machine.RomKey] = roms.ToArray(); - } - - else if (item.SHA256 != null && item.SHA256.Any()) - { - var roms = new List(); - foreach (var sha256 in item.SHA256) - { - roms.Add(ConvertToInternalModel(sha256)); - } - machine[Machine.RomKey] = roms.ToArray(); - } - - else if (item.SHA384 != null && item.SHA384.Any()) - { - var roms = new List(); - foreach (var sha384 in item.SHA384) - { - roms.Add(ConvertToInternalModel(sha384)); - } - machine[Machine.RomKey] = roms.ToArray(); - } - - else if (item.SHA512 != null && item.SHA512.Any()) - { - var roms = new List(); - foreach (var sha512 in item.SHA512) - { - roms.Add(ConvertToInternalModel(sha512)); - } - machine[Machine.RomKey] = roms.ToArray(); - } - - else if (item.SpamSum != null && item.SpamSum.Any()) - { - var roms = new List(); - foreach (var spamSum in item.SpamSum) - { - roms.Add(ConvertToInternalModel(spamSum)); - } - machine[Machine.RomKey] = roms.ToArray(); - } - - return machine; - } - - /// - /// Convert from to - /// - private static Rom ConvertToInternalModel(Models.Hashfile.MD5 item) - { - var rom = new Rom - { - [Rom.MD5Key] = item.Hash, - [Rom.NameKey] = item.File, - }; - return rom; - } - - /// - /// Convert from to - /// - private static Rom ConvertToInternalModel(Models.Hashfile.SFV item) - { - var rom = new Rom - { - [Rom.NameKey] = item.File, - [Rom.CRCKey] = item.Hash, - }; - return rom; - } - - /// - /// Convert from to - /// - private static Rom ConvertToInternalModel(Models.Hashfile.SHA1 item) - { - var rom = new Rom - { - [Rom.SHA1Key] = item.Hash, - [Rom.NameKey] = item.File, - }; - return rom; - } - - /// - /// Convert from to - /// - private static Rom ConvertToInternalModel(Models.Hashfile.SHA256 item) - { - var rom = new Rom - { - [Rom.SHA256Key] = item.Hash, - [Rom.NameKey] = item.File, - }; - return rom; - } - - /// - /// Convert from to - /// - private static Rom ConvertToInternalModel(Models.Hashfile.SHA384 item) - { - var rom = new Rom - { - [Rom.SHA384Key] = item.Hash, - [Rom.NameKey] = item.File, - }; - return rom; - } - - /// - /// Convert from to - /// - private static Rom ConvertToInternalModel(Models.Hashfile.SHA512 item) - { - var rom = new Rom - { - [Rom.SHA512Key] = item.Hash, - [Rom.NameKey] = item.File, - }; - return rom; - } - - /// - /// Convert from to - /// - private static Rom ConvertToInternalModel(Models.Hashfile.SpamSum item) - { - var rom = new Rom - { - [Rom.SpamSumKey] = item.Hash, - [Rom.NameKey] = item.File, - }; - return rom; - } - - #endregion - - #region Deserialize - - /// - /// Convert from to - /// - public static Models.Hashfile.Hashfile? ConvertMachineToHashfile(Machine? item, Hash hash) - { - if (item == null) - return null; - - var roms = item.Read(Machine.RomKey); - return new Models.Hashfile.Hashfile - { - SFV = hash == Hash.CRC ? roms?.Select(ConvertToSFV)?.ToArray() : null, - MD5 = hash == Hash.MD5 ? roms?.Select(ConvertToMD5)?.ToArray() : null, - SHA1 = hash == Hash.SHA1 ? roms?.Select(ConvertToSHA1)?.ToArray() : null, - SHA256 = hash == Hash.SHA256 ? roms?.Select(ConvertToSHA256)?.ToArray() : null, - SHA384 = hash == Hash.SHA384 ? roms?.Select(ConvertToSHA384)?.ToArray() : null, - SHA512 = hash == Hash.SHA512 ? roms?.Select(ConvertToSHA512)?.ToArray() : null, - SpamSum = hash == Hash.SpamSum ? roms?.Select(ConvertToSpamSum)?.ToArray() : null, - }; - } - - /// - /// Convert from to - /// - private static Models.Hashfile.MD5? ConvertToMD5(Rom? item) - { - if (item == null) - return null; - - var md5 = new Models.Hashfile.MD5 - { - Hash = item.ReadString(Rom.MD5Key), - File = item.ReadString(Rom.NameKey), - }; - return md5; - } - - /// - /// Convert from to - /// - private static Models.Hashfile.SFV? ConvertToSFV(Rom? item) - { - if (item == null) - return null; - - var sfv = new Models.Hashfile.SFV - { - File = item.ReadString(Rom.NameKey), - Hash = item.ReadString(Rom.CRCKey), - }; - return sfv; - } - - /// - /// Convert from to - /// - private static Models.Hashfile.SHA1? ConvertToSHA1(Rom? item) - { - if (item == null) - return null; - - var sha1 = new Models.Hashfile.SHA1 - { - Hash = item.ReadString(Rom.SHA1Key), - File = item.ReadString(Rom.NameKey), - }; - return sha1; - } - - /// - /// Convert from to - /// - private static Models.Hashfile.SHA256? ConvertToSHA256(Rom? item) - { - if (item == null) - return null; - - var sha256 = new Models.Hashfile.SHA256 - { - Hash = item.ReadString(Rom.SHA256Key), - File = item.ReadString(Rom.NameKey), - }; - return sha256; - } - - /// - /// Convert from to - /// - private static Models.Hashfile.SHA384? ConvertToSHA384(Rom? item) - { - if (item == null) - return null; - - var sha384 = new Models.Hashfile.SHA384 - { - Hash = item.ReadString(Rom.SHA384Key), - File = item.ReadString(Rom.NameKey), - }; - return sha384; - } - - /// - /// Convert from to - /// - private static Models.Hashfile.SHA512? ConvertToSHA512(Rom? item) - { - if (item == null) - return null; - - var sha512 = new Models.Hashfile.SHA512 - { - Hash = item.ReadString(Rom.SHA512Key), - File = item.ReadString(Rom.NameKey), - }; - return sha512; - } - - /// - /// Convert from to - /// - private static Models.Hashfile.SpamSum? ConvertToSpamSum(Rom? item) - { - if (item == null) - return null; - - var spamsum = new Models.Hashfile.SpamSum - { - Hash = item.ReadString(Rom.SpamSumKey), - File = item.ReadString(Rom.NameKey), - }; - return spamsum; - } - - #endregion - } -} \ No newline at end of file