diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs index 7367d152..07041dfb 100644 --- a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs +++ b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Linq; using SabreTools.Core; -using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; @@ -69,7 +67,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.SeparatedValue().Deserialize(metadata); if (!(new Serialization.Files.SeparatedValue().Serialize(metadataFile, outfile, _delim))) { logger.Warning($"File '{outfile}' could not be written! See the log for more details."); @@ -85,157 +85,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.SeparatedValue.MetadataFile CreateMetadataFile(bool ignoreblanks) - { - var metadataFile = new Models.SeparatedValue.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.SeparatedValue.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 Disk disk: - rows.Add(CreateRow(disk)); - break; - case Media media: - rows.Add(CreateRow(media)); - break; - case Rom rom: - rows.Add(CreateRow(rom)); - break; - } - } - } - - return [.. rows]; - } - - /// - /// Create a Row from the current Disk DatItem - /// - private Models.SeparatedValue.Row CreateRow(Disk disk) - { - var row = new Models.SeparatedValue.Row - { - FileName = Header.GetStringFieldValue(DatHeader.FileNameKey), - InternalName = Header.GetStringFieldValue(Models.Metadata.Header.NameKey), - Description = Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey), - GameName = disk.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), - GameDescription = disk.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey), - Type = disk.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(), - RomName = string.Empty, - DiskName = disk.GetName(), - Size = string.Empty, - CRC = string.Empty, - MD5 = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key), - SHA1 = disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), - SHA256 = string.Empty, - SHA384 = string.Empty, - SHA512 = string.Empty, - SpamSum = string.Empty, - Status = disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue().AsStringValue(useSecond: false), - }; - return row; - } - - /// - /// Create a Row from the current Media DatItem - /// - private Models.SeparatedValue.Row CreateRow(Media media) - { - var row = new Models.SeparatedValue.Row - { - FileName = Header.GetStringFieldValue(DatHeader.FileNameKey), - InternalName = Header.GetStringFieldValue(Models.Metadata.Header.NameKey), - Description = Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey), - GameName = media.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), - GameDescription = media.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey), - Type = media.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(), - RomName = string.Empty, - DiskName = media.GetName(), - Size = string.Empty, - CRC = string.Empty, - MD5 = media.GetStringFieldValue(Models.Metadata.Media.MD5Key), - SHA1 = media.GetStringFieldValue(Models.Metadata.Media.SHA1Key), - SHA256 = media.GetStringFieldValue(Models.Metadata.Media.SHA256Key), - SHA384 = string.Empty, - SHA512 = string.Empty, - SpamSum = media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey), - Status = string.Empty, - }; - return row; - } - - /// - /// Create a Row from the current Rom DatItem - /// - private Models.SeparatedValue.Row CreateRow(Rom rom) - { - var row = new Models.SeparatedValue.Row - { - FileName = Header.GetStringFieldValue(DatHeader.FileNameKey), - InternalName = Header.GetStringFieldValue(Models.Metadata.Header.NameKey), - Description = Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey), - GameName = rom.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), - GameDescription = rom.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey), - Type = rom.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(), - RomName = rom.GetName(), - DiskName = string.Empty, - Size = rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString(), - CRC = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey), - MD5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key), - SHA1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), - SHA256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key), - SHA384 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key), - SHA512 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key), - SpamSum = rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey), - Status = rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue().AsStringValue(useSecond: false), - }; - return row; - } - - #endregion } }