diff --git a/SabreTools.DatFiles/Formats/AttractMode.Writer.cs b/SabreTools.DatFiles/Formats/AttractMode.Writer.cs index 2b47c2d9..437b71a2 100644 --- a/SabreTools.DatFiles/Formats/AttractMode.Writer.cs +++ b/SabreTools.DatFiles/Formats/AttractMode.Writer.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; -using System.Linq; using SabreTools.Core; using SabreTools.DatItems; -using SabreTools.DatItems.Formats; namespace SabreTools.DatFiles.Formats { @@ -40,7 +38,9 @@ namespace SabreTools.DatFiles.Formats { logger.User($"Writing to '{outfile}'..."); - var metadataFile = CreateMetadataFile(ignoreblanks); + // Serialize the input file + var metadata = ConvertMetadata(ignoreblanks); + var metadataFile = new Serialization.CrossModel.AttractMode().Deserialize(metadata); if (!(new Serialization.Files.AttractMode().Serialize(metadataFile, outfile))) { logger.Warning($"File '{outfile}' could not be written! See the log for more details."); @@ -56,96 +56,5 @@ namespace SabreTools.DatFiles.Formats logger.User($"'{outfile}' written!{Environment.NewLine}"); return true; } - - #region Converters - - /// - /// Create a MetadataFile from the current internal information - /// - /// True if blank roms should be skipped on output, false otherwise - private Models.AttractMode.MetadataFile CreateMetadataFile(bool ignoreblanks) - { - var metadataFile = new Models.AttractMode.MetadataFile - { - Row = CreateRows(ignoreblanks) - }; - return metadataFile; - } - - /// - /// Create an array of Row from the current internal information - /// - /// True if blank roms should be skipped on output, false otherwise - private Models.AttractMode.Row[]? CreateRows(bool ignoreblanks) - { - // If we don't have items, we can't do anything - if (this.Items == null || !this.Items.Any()) - return null; - - // Create a list of hold the rows - var rows = new List(); - - // Loop through the sorted items and create games for them - foreach (string key in Items.SortedKeys) - { - var items = Items.FilteredItems(key); - if (items == null || !items.Any()) - continue; - - // Loop through and convert the items to respective lists - for (int index = 0; index < items.Count; index++) - { - // Get the item - var item = items[index]; - - // Check for a "null" item - item = ProcessNullifiedItem(item); - - // Skip if we're ignoring the item - if (ShouldIgnore(item, ignoreblanks)) - continue; - - switch (item) - { - case Rom rom: - rows.Add(CreateRow(rom)); - break; - } - } - } - - return [.. rows]; - } - - /// - /// Create a Row from the current Rom DatItem - /// - private Models.AttractMode.Row CreateRow(Rom rom) - { - var row = new Models.AttractMode.Row - { - Name = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), - Title = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), - Emulator = Header.GetFieldValue(DatHeader.FileNameKey), - CloneOf = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey), - Year = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.YearKey), - Manufacturer = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.ManufacturerKey), - Category = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CategoryKey), - Players = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.PlayersKey), - Rotation = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RotationKey), - Control = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.ControlKey), - Status = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.StatusKey), - DisplayCount = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DisplayCountKey), - DisplayType = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DisplayTypeKey), - AltRomname = rom.GetFieldValue(Models.Metadata.Rom.AltRomnameKey), - AltTitle = rom.GetFieldValue(Models.Metadata.Rom.AltTitleKey), - Extra = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CommentKey), - Buttons = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.ButtonsKey), - // TODO: Add extended fields - }; - return row; - } - - #endregion } }