using System.Linq; using SabreTools.Models.OpenMSX; namespace SabreTools.Serialization { /// /// XML deserializer for OpenMSX software database files /// public partial class OpenMSX : XmlSerializer { #region Internal /// /// Convert from to /// public static SoftwareDb? ConvertFromInternalModel(Models.Metadata.MetadataFile? item) { if (item == null) return null; var header = item.Read(Models.Metadata.MetadataFile.HeaderKey); var softwareDb = header != null ? ConvertHeaderFromInternalModel(header) : new SoftwareDb(); var machines = item.Read(Models.Metadata.MetadataFile.MachineKey); if (machines != null && machines.Any()) { softwareDb.Software = machines .Where(m => m != null) .Select(ConvertMachineFromInternalModel) .ToArray(); } return softwareDb; } /// /// Convert from to /// private static SoftwareDb ConvertHeaderFromInternalModel(Models.Metadata.Header item) { var softwareDb = new SoftwareDb { Timestamp = item.ReadString(Models.Metadata.Header.TimestampKey), }; return softwareDb; } /// /// Convert from to /// private static Software ConvertMachineFromInternalModel(Models.Metadata.Machine item) { var game = new Software { Title = item.ReadString(Models.Metadata.Machine.NameKey), GenMSXID = item.ReadString(Models.Metadata.Machine.GenMSXIDKey), System = item.ReadString(Models.Metadata.Machine.SystemKey), Company = item.ReadString(Models.Metadata.Machine.CompanyKey), Year = item.ReadString(Models.Metadata.Machine.YearKey), Country = item.ReadString(Models.Metadata.Machine.CountryKey), }; var dumps = item.Read(Models.Metadata.Machine.DumpKey); if (dumps != null && dumps.Any()) { game.Dump = dumps .Where(d => d != null) .Select(ConvertFromInternalModel) .ToArray(); } return game; } /// /// Convert from to /// private static Dump ConvertFromInternalModel(Models.Metadata.Dump item) { var dump = new Dump(); var original = item.Read(Models.Metadata.Dump.OriginalKey); if (original != null) dump.Original = ConvertFromInternalModel(original); var rom = item.Read(Models.Metadata.Dump.RomKey); if (rom != null) dump.Rom = ConvertRomFromInternalModel(rom); var megaRom = item.Read(Models.Metadata.Dump.MegaRomKey); if (megaRom != null) dump.Rom = ConvertMegaRomFromInternalModel(megaRom); var sccPlusCart = item.Read(Models.Metadata.Dump.SCCPlusCartKey); if (sccPlusCart != null) dump.Rom = ConvertSCCPlusCartFromInternalModel(sccPlusCart); return dump; } /// /// Convert from to /// private static MegaRom ConvertMegaRomFromInternalModel(Models.Metadata.Rom item) { var megaRom = new MegaRom { Start = item.ReadString(Models.Metadata.Rom.StartKey), Type = item.ReadString(Models.Metadata.Rom.TypeKey), Hash = item.ReadString(Models.Metadata.Rom.SHA1Key), Remark = item.ReadString(Models.Metadata.Rom.RemarkKey), }; return megaRom; } /// /// Convert from to /// private static Original ConvertFromInternalModel(Models.Metadata.Original item) { var original = new Original { Value = item.ReadString(Models.Metadata.Original.ValueKey), Content = item.ReadString(Models.Metadata.Original.ContentKey), }; return original; } /// /// Convert from to /// private static Rom ConvertRomFromInternalModel(Models.Metadata.Rom item) { var rom = new Rom { Start = item.ReadString(Models.Metadata.Rom.StartKey), Type = item.ReadString(Models.Metadata.Rom.TypeKey), Hash = item.ReadString(Models.Metadata.Rom.SHA1Key), Remark = item.ReadString(Models.Metadata.Rom.RemarkKey), }; return rom; } /// /// Convert from to /// private static SCCPlusCart ConvertSCCPlusCartFromInternalModel(Models.Metadata.Rom item) { var sccPlusCart = new SCCPlusCart { Start = item.ReadString(Models.Metadata.Rom.StartKey), Type = item.ReadString(Models.Metadata.Rom.TypeKey), Hash = item.ReadString(Models.Metadata.Rom.SHA1Key), Remark = item.ReadString(Models.Metadata.Rom.RemarkKey), }; return sccPlusCart; } #endregion } }