diff --git a/SabreTools.Serialization/DosCenter.Deserializer.cs b/SabreTools.Serialization/DosCenter.Deserializer.cs index aa668de5..cc707cf9 100644 --- a/SabreTools.Serialization/DosCenter.Deserializer.cs +++ b/SabreTools.Serialization/DosCenter.Deserializer.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; using SabreTools.IO.Readers; using SabreTools.Models.DosCenter; @@ -230,5 +231,68 @@ namespace SabreTools.Serialization file.ADDITIONAL_ELEMENTS = itemAdditional.ToArray(); return file; } + + // TODO: Add deserialization of entire MetadataFile + #region Internal + + /// + /// Convert from to + /// + public static Models.DosCenter.DosCenter? ConvertHeaderFromInternalModel(Models.Internal.Header? item) + { + if (item == null) + return null; + + var dosCenter = new Models.DosCenter.DosCenter + { + Name = item.ReadString(Models.Internal.Header.NameKey), + Description = item.ReadString(Models.Internal.Header.DescriptionKey), + Version = item.ReadString(Models.Internal.Header.VersionKey), + Date = item.ReadString(Models.Internal.Header.DateKey), + Author = item.ReadString(Models.Internal.Header.AuthorKey), + Homepage = item.ReadString(Models.Internal.Header.HomepageKey), + Comment = item.ReadString(Models.Internal.Header.CommentKey), + }; + return dosCenter; + } + + /// + /// Convert from to + /// + public static Game? ConvertMachineFromInternalModel(Models.Internal.Machine? item) + { + if (item == null) + return null; + + var game = new Game + { + Name = item.ReadString(Models.Internal.Machine.NameKey), + }; + + var roms = item.Read(Models.Internal.Machine.RomKey); + game.File = roms?.Select(ConvertFromInternalModel)?.ToArray(); + + return game; + } + + /// + /// Convert from to + /// + private static Models.DosCenter.File? ConvertFromInternalModel(Models.Internal.Rom? item) + { + if (item == null) + return null; + + var file = new Models.DosCenter.File + { + Name = item.ReadString(Models.Internal.Rom.NameKey), + Size = item.ReadString(Models.Internal.Rom.SizeKey), + CRC = item.ReadString(Models.Internal.Rom.CRCKey), + Date = item.ReadString(Models.Internal.Rom.DateKey), + }; + return file; + } + + #endregion } } \ No newline at end of file diff --git a/SabreTools.Serialization/DosCenter.Serializer.cs b/SabreTools.Serialization/DosCenter.Serializer.cs index fe774bc2..77b87e2e 100644 --- a/SabreTools.Serialization/DosCenter.Serializer.cs +++ b/SabreTools.Serialization/DosCenter.Serializer.cs @@ -145,5 +145,74 @@ namespace SabreTools.Serialization writer.WriteEndElement(); // file } } + + #region Internal + + /// + /// Convert from to + /// + public static Models.Internal.MetadataFile ConvertToInternalModel(MetadataFile item) + { + var metadataFile = new Models.Internal.MetadataFile(); + + if (item?.DosCenter != null) + metadataFile[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item.DosCenter); + + if (item?.Game != null && item.Game.Any()) + metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Game.Select(ConvertMachineToInternalModel).ToArray(); + + return metadataFile; + } + + /// + /// Convert from to + /// + private static Models.Internal.Header ConvertHeaderToInternalModel(Models.DosCenter.DosCenter item) + { + var header = new Models.Internal.Header + { + [Models.Internal.Header.NameKey] = item.Name, + [Models.Internal.Header.DescriptionKey] = item.Description, + [Models.Internal.Header.VersionKey] = item.Version, + [Models.Internal.Header.DateKey] = item.Date, + [Models.Internal.Header.AuthorKey] = item.Author, + [Models.Internal.Header.HomepageKey] = item.Homepage, + [Models.Internal.Header.CommentKey] = item.Comment, + }; + return header; + } + + /// + /// Convert from to + /// + private static Models.Internal.Machine ConvertMachineToInternalModel(Game item) + { + var machine = new Models.Internal.Machine + { + [Models.Internal.Machine.NameKey] = item.Name, + }; + + if (item.File != null && item.File.Any()) + machine[Models.Internal.Machine.RomKey] = item.File.Select(ConvertToInternalModel).ToArray(); + + return machine; + } + + /// + /// Convert from to + /// + private static Models.Internal.Rom ConvertToInternalModel(Models.DosCenter.File item) + { + var rom = new Models.Internal.Rom + { + [Models.Internal.Rom.NameKey] = item.Name, + [Models.Internal.Rom.SizeKey] = item.Size, + [Models.Internal.Rom.CRCKey] = item.CRC, + [Models.Internal.Rom.DateKey] = item.Date, + }; + return rom; + } + + #endregion } } \ No newline at end of file diff --git a/SabreTools.Serialization/Internal.DosCenter.cs b/SabreTools.Serialization/Internal.DosCenter.cs deleted file mode 100644 index d10c2a40..00000000 --- a/SabreTools.Serialization/Internal.DosCenter.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using SabreTools.Models.Internal; - -namespace SabreTools.Serialization -{ - /// - /// Serializer for DosCenter models to internal structure - /// - public partial class Internal - { - #region Serialize - - /// - /// Convert from to - /// - public static MetadataFile ConvertToInternalModel(Models.DosCenter.MetadataFile item) - { - var metadataFile = new MetadataFile(); - - if (item?.DosCenter != null) - metadataFile[MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item.DosCenter); - - if (item?.Game != null && item.Game.Any()) - metadataFile[MetadataFile.MachineKey] = item.Game.Select(ConvertMachineToInternalModel).ToArray(); - - return metadataFile; - } - - /// - /// Convert from to - /// - private static Header ConvertHeaderToInternalModel(Models.DosCenter.DosCenter item) - { - var header = new Header - { - [Header.NameKey] = item.Name, - [Header.DescriptionKey] = item.Description, - [Header.VersionKey] = item.Version, - [Header.DateKey] = item.Date, - [Header.AuthorKey] = item.Author, - [Header.HomepageKey] = item.Homepage, - [Header.CommentKey] = item.Comment, - }; - return header; - } - - /// - /// Convert from to - /// - private static Machine ConvertMachineToInternalModel(Models.DosCenter.Game item) - { - var machine = new Machine - { - [Machine.NameKey] = item.Name, - }; - - if (item.File != null && item.File.Any()) - { - var roms = new List(); - foreach (var file in item.File) - { - roms.Add(ConvertToInternalModel(file)); - } - machine[Machine.RomKey] = roms.ToArray(); - } - - return machine; - } - - /// - /// Convert from to - /// - private static Rom ConvertToInternalModel(Models.DosCenter.File item) - { - var rom = new Rom - { - [Rom.NameKey] = item.Name, - [Rom.SizeKey] = item.Size, - [Rom.CRCKey] = item.CRC, - [Rom.DateKey] = item.Date, - }; - return rom; - } - - #endregion - - #region Deserialize - - /// - /// Convert from to - /// - public static Models.DosCenter.DosCenter? ConvertHeaderToDosCenter(Header? item) - { - if (item == null) - return null; - - var dosCenter = new Models.DosCenter.DosCenter - { - Name = item.ReadString(Header.NameKey), - Description = item.ReadString(Header.DescriptionKey), - Version = item.ReadString(Header.VersionKey), - Date = item.ReadString(Header.DateKey), - Author = item.ReadString(Header.AuthorKey), - Homepage = item.ReadString(Header.HomepageKey), - Comment = item.ReadString(Header.CommentKey), - }; - return dosCenter; - } - - /// - /// Convert from to - /// - public static Models.DosCenter.Game? ConvertMachineToDosCenter(Machine? item) - { - if (item == null) - return null; - - var game = new Models.DosCenter.Game - { - Name = item.ReadString(Machine.NameKey), - }; - - var roms = item.Read(Machine.RomKey); - game.File = roms?.Select(ConvertToDosCenter)?.ToArray(); - - return game; - } - - /// - /// Convert from to - /// - private static Models.DosCenter.File? ConvertToDosCenter(Rom? item) - { - if (item == null) - return null; - - var file = new Models.DosCenter.File - { - Name = item.ReadString(Rom.NameKey), - Size = item.ReadString(Rom.SizeKey), - CRC = item.ReadString(Rom.CRCKey), - Date = item.ReadString(Rom.DateKey), - }; - return file; - } - - #endregion - } -} \ No newline at end of file