diff --git a/SabreTools.Serialization/Internal.RomCenter.cs b/SabreTools.Serialization/Internal.RomCenter.cs deleted file mode 100644 index 2b3f52ac..00000000 --- a/SabreTools.Serialization/Internal.RomCenter.cs +++ /dev/null @@ -1,196 +0,0 @@ -using System.Linq; -using SabreTools.Models.Internal; - -namespace SabreTools.Serialization -{ - /// - /// Serializer for RomCenter models to internal structure - /// - public partial class Internal - { - #region Serialize - - /// - /// Convert from to - /// - public static MetadataFile ConvertToInternalModel(Models.RomCenter.MetadataFile item) - { - var metadataFile = new MetadataFile - { - [MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), - }; - - if (item?.Games?.Rom != null && item.Games.Rom.Any()) - metadataFile[MetadataFile.MachineKey] = item.Games.Rom.Select(ConvertMachineToInternalModel).ToArray(); - - return metadataFile; - } - - /// - /// Convert from to - /// - private static Header ConvertHeaderToInternalModel(Models.RomCenter.MetadataFile item) - { - var header = new Header(); - - if (item.Credits != null) - { - header[Header.AuthorKey] = item.Credits.Author; - header[Header.VersionKey] = item.Credits.Version; - header[Header.EmailKey] = item.Credits.Email; - header[Header.HomepageKey] = item.Credits.Homepage; - header[Header.UrlKey] = item.Credits.Url; - header[Header.DateKey] = item.Credits.Date; - header[Header.CommentKey] = item.Credits.Comment; - } - - if (item.Dat != null) - { - header[Header.DatVersionKey] = item.Dat.Version; - header[Header.PluginKey] = item.Dat.Plugin; - - if (item.Dat.Split == "yes" || item.Dat.Split == "1") - header[Header.ForceMergingKey] = "split"; - else if (item.Dat.Merge == "yes" || item.Dat.Merge == "1") - header[Header.ForceMergingKey] = "merge"; - } - - if (item.Emulator != null) - { - header[Header.RefNameKey] = item.Emulator.RefName; - header[Header.EmulatorVersionKey] = item.Emulator.Version; - } - - return header; - } - - /// - /// Convert from to - /// - private static Machine ConvertMachineToInternalModel(Models.RomCenter.Rom item) - { - var machine = new Machine - { - [Machine.RomOfKey] = item.ParentName, - //[Machine.ParentDescriptionKey] = item.ParentDescription, // This is unmappable - [Machine.NameKey] = item.GameName, - [Machine.DescriptionKey] = item.GameDescription, - [Machine.RomKey] = new Rom[] { ConvertToInternalModel(item) }, - }; - - return machine; - } - - /// - /// Convert from to - /// - private static Rom ConvertToInternalModel(Models.RomCenter.Rom item) - { - var rom = new Rom - { - [Rom.NameKey] = item.RomName, - [Rom.CRCKey] = item.RomCRC, - [Rom.SizeKey] = item.RomSize, - [Rom.MergeKey] = item.MergeName, - }; - return rom; - } - - #endregion - - #region Deserialize - - /// - /// Convert from to - /// - public static Models.RomCenter.MetadataFile? ConvertHeaderToRomCenter(Header? item) - { - if (item == null) - return null; - - var metadataFile = new Models.RomCenter.MetadataFile(); - - if (item.ContainsKey(Header.AuthorKey) - || item.ContainsKey(Header.VersionKey) - || item.ContainsKey(Header.EmailKey) - || item.ContainsKey(Header.HomepageKey) - || item.ContainsKey(Header.UrlKey) - || item.ContainsKey(Header.DateKey) - || item.ContainsKey(Header.CommentKey)) - { - metadataFile.Credits = new Models.RomCenter.Credits - { - Author = item.ReadString(Header.AuthorKey), - Version = item.ReadString(Header.VersionKey), - Email = item.ReadString(Header.EmailKey), - Homepage = item.ReadString(Header.HomepageKey), - Url = item.ReadString(Header.UrlKey), - Date = item.ReadString(Header.DateKey), - Comment = item.ReadString(Header.CommentKey), - }; - } - - if (item.ContainsKey(Header.DatVersionKey) - || item.ContainsKey(Header.PluginKey) - || item.ContainsKey(Header.ForceMergingKey)) - { - metadataFile.Dat = new Models.RomCenter.Dat - { - Version = item.ReadString(Header.DatVersionKey), - Plugin = item.ReadString(Header.PluginKey), - Split = item.ReadString(Header.ForceMergingKey) == "split" ? "yes" : "no", - Merge = item.ReadString(Header.ForceMergingKey) == "merge" ? "yes" : "no", - }; - } - - if (item.ContainsKey(Header.RefNameKey) - || item.ContainsKey(Header.EmulatorVersionKey)) - { - metadataFile.Emulator = new Models.RomCenter.Emulator - { - RefName = item.ReadString(Header.RefNameKey), - Version = item.ReadString(Header.EmulatorVersionKey), - }; - } - - return metadataFile; - } - - /// - /// Convert from to an array of - /// - public static Models.RomCenter.Rom?[]? ConvertMachineToRomCenter(Machine? item) - { - if (item == null) - return null; - - var roms = item.Read(Machine.RomKey); - return roms?.Select(rom => ConvertToRomCenter(rom, item))?.ToArray(); - } - - /// - /// Convert from to - /// - private static Models.RomCenter.Rom? ConvertToRomCenter(Rom? item, Machine? parent) - { - if (item == null) - return null; - - var row = new Models.RomCenter.Rom - { - RomName = item.ReadString(Rom.NameKey), - RomCRC = item.ReadString(Rom.CRCKey), - RomSize = item.ReadString(Rom.SizeKey), - MergeName = item.ReadString(Rom.MergeKey), - - ParentName = parent?.ReadString(Machine.RomOfKey), - //ParentDescription = parent?.ReadString(Machine.ParentDescriptionKey), // This is unmappable - GameName = parent?.ReadString(Machine.NameKey), - GameDescription = parent?.ReadString(Machine.DescriptionKey), - }; - return row; - } - - #endregion - } -} \ No newline at end of file diff --git a/SabreTools.Serialization/RomCenter.Deserializer.cs b/SabreTools.Serialization/RomCenter.Deserializer.cs index 0eb32b9e..ed95cf8a 100644 --- a/SabreTools.Serialization/RomCenter.Deserializer.cs +++ b/SabreTools.Serialization/RomCenter.Deserializer.cs @@ -220,5 +220,101 @@ namespace SabreTools.Serialization } return dat; } + + // TODO: Add deserialization of entire MetadataFile + #region Internal + + /// + /// Convert from to + /// + public static MetadataFile? ConvertHeaderFromInternalModel(Models.Internal.Header? item) + { + if (item == null) + return null; + + var metadataFile = new MetadataFile(); + + if (item.ContainsKey(Models.Internal.Header.AuthorKey) + || item.ContainsKey(Models.Internal.Header.VersionKey) + || item.ContainsKey(Models.Internal.Header.EmailKey) + || item.ContainsKey(Models.Internal.Header.HomepageKey) + || item.ContainsKey(Models.Internal.Header.UrlKey) + || item.ContainsKey(Models.Internal.Header.DateKey) + || item.ContainsKey(Models.Internal.Header.CommentKey)) + { + metadataFile.Credits = new Credits + { + Author = item.ReadString(Models.Internal.Header.AuthorKey), + Version = item.ReadString(Models.Internal.Header.VersionKey), + Email = item.ReadString(Models.Internal.Header.EmailKey), + Homepage = item.ReadString(Models.Internal.Header.HomepageKey), + Url = item.ReadString(Models.Internal.Header.UrlKey), + Date = item.ReadString(Models.Internal.Header.DateKey), + Comment = item.ReadString(Models.Internal.Header.CommentKey), + }; + } + + if (item.ContainsKey(Models.Internal.Header.DatVersionKey) + || item.ContainsKey(Models.Internal.Header.PluginKey) + || item.ContainsKey(Models.Internal.Header.ForceMergingKey)) + { + metadataFile.Dat = new Dat + { + Version = item.ReadString(Models.Internal.Header.DatVersionKey), + Plugin = item.ReadString(Models.Internal.Header.PluginKey), + Split = item.ReadString(Models.Internal.Header.ForceMergingKey) == "split" ? "yes" : "no", + Merge = item.ReadString(Models.Internal.Header.ForceMergingKey) == "merge" ? "yes" : "no", + }; + } + + if (item.ContainsKey(Models.Internal.Header.RefNameKey) + || item.ContainsKey(Models.Internal.Header.EmulatorVersionKey)) + { + metadataFile.Emulator = new Emulator + { + RefName = item.ReadString(Models.Internal.Header.RefNameKey), + Version = item.ReadString(Models.Internal.Header.EmulatorVersionKey), + }; + } + + return metadataFile; + } + + /// + /// Convert from to an array of + /// + public static Rom?[]? ConvertMachineFromInternalModel(Models.Internal.Machine? item) + { + if (item == null) + return null; + + var roms = item.Read(Models.Internal.Machine.RomKey); + return roms?.Select(rom => ConvertFromInternalModel(rom, item))?.ToArray(); + } + + /// + /// Convert from to + /// + private static Rom? ConvertFromInternalModel(Models.Internal.Rom? item, Models.Internal.Machine? parent) + { + if (item == null) + return null; + + var row = new Rom + { + RomName = item.ReadString(Models.Internal.Rom.NameKey), + RomCRC = item.ReadString(Models.Internal.Rom.CRCKey), + RomSize = item.ReadString(Models.Internal.Rom.SizeKey), + MergeName = item.ReadString(Models.Internal.Rom.MergeKey), + + ParentName = parent?.ReadString(Models.Internal.Machine.RomOfKey), + //ParentDescription = parent?.ReadString(Models.Internal.Machine.ParentDescriptionKey), // This is unmappable + GameName = parent?.ReadString(Models.Internal.Machine.NameKey), + GameDescription = parent?.ReadString(Models.Internal.Machine.DescriptionKey), + }; + return row; + } + + #endregion } } \ No newline at end of file diff --git a/SabreTools.Serialization/RomCenter.Serializer.cs b/SabreTools.Serialization/RomCenter.Serializer.cs index 4142f705..fe25e030 100644 --- a/SabreTools.Serialization/RomCenter.Serializer.cs +++ b/SabreTools.Serialization/RomCenter.Serializer.cs @@ -172,5 +172,95 @@ namespace SabreTools.Serialization writer.WriteLine(); writer.Flush(); } + + #region Internal + + /// + /// Convert from to + /// + public static Models.Internal.MetadataFile ConvertToInternalModel(MetadataFile item) + { + var metadataFile = new Models.Internal.MetadataFile + { + [Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), + }; + + if (item?.Games?.Rom != null && item.Games.Rom.Any()) + metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Games.Rom.Select(ConvertMachineToInternalModel).ToArray(); + + return metadataFile; + } + + /// + /// Convert from to + /// + private static Models.Internal.Header ConvertHeaderToInternalModel(MetadataFile item) + { + var header = new Models.Internal.Header(); + + if (item.Credits != null) + { + header[Models.Internal.Header.AuthorKey] = item.Credits.Author; + header[Models.Internal.Header.VersionKey] = item.Credits.Version; + header[Models.Internal.Header.EmailKey] = item.Credits.Email; + header[Models.Internal.Header.HomepageKey] = item.Credits.Homepage; + header[Models.Internal.Header.UrlKey] = item.Credits.Url; + header[Models.Internal.Header.DateKey] = item.Credits.Date; + header[Models.Internal.Header.CommentKey] = item.Credits.Comment; + } + + if (item.Dat != null) + { + header[Models.Internal.Header.DatVersionKey] = item.Dat.Version; + header[Models.Internal.Header.PluginKey] = item.Dat.Plugin; + + if (item.Dat.Split == "yes" || item.Dat.Split == "1") + header[Models.Internal.Header.ForceMergingKey] = "split"; + else if (item.Dat.Merge == "yes" || item.Dat.Merge == "1") + header[Models.Internal.Header.ForceMergingKey] = "merge"; + } + + if (item.Emulator != null) + { + header[Models.Internal.Header.RefNameKey] = item.Emulator.RefName; + header[Models.Internal.Header.EmulatorVersionKey] = item.Emulator.Version; + } + + return header; + } + + /// + /// Convert from to + /// + private static Models.Internal.Machine ConvertMachineToInternalModel(Rom item) + { + var machine = new Models.Internal.Machine + { + [Models.Internal.Machine.RomOfKey] = item.ParentName, + //[Models.Internal.Machine.ParentDescriptionKey] = item.ParentDescription, // This is unmappable + [Models.Internal.Machine.NameKey] = item.GameName, + [Models.Internal.Machine.DescriptionKey] = item.GameDescription, + [Models.Internal.Machine.RomKey] = new Models.Internal.Rom[] { ConvertToInternalModel(item) }, + }; + + return machine; + } + + /// + /// Convert from to + /// + private static Models.Internal.Rom ConvertToInternalModel(Rom item) + { + var rom = new Models.Internal.Rom + { + [Models.Internal.Rom.NameKey] = item.RomName, + [Models.Internal.Rom.CRCKey] = item.RomCRC, + [Models.Internal.Rom.SizeKey] = item.RomSize, + [Models.Internal.Rom.MergeKey] = item.MergeName, + }; + return rom; + } + + #endregion } } \ No newline at end of file