From c0ad91821521f13022a9f2e7f13371c28da4d1c5 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 20 Sep 2019 10:30:30 -0700 Subject: [PATCH] Convert Disk to Rom for rebuilding --- SabreTools.Library/DatFiles/DatFile.cs | 24 +++++------ SabreTools.Library/DatItems/Disk.cs | 59 ++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 14 deletions(-) diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index 924555b0..11b009b0 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -3486,7 +3486,7 @@ namespace SabreTools.Library.DatFiles { empties = archive.GetEmptyFolders(); } - + // Add add all of the found empties to the DAT Parallel.ForEach(empties, Globals.ParallelOptions, empty => { @@ -3537,7 +3537,7 @@ namespace SabreTools.Library.DatFiles if (datItem.ItemType != ItemType.Rom && datItem.ItemType != ItemType.Disk) { return; - } + } try { @@ -4103,20 +4103,16 @@ namespace SabreTools.Library.DatFiles outputFormat = OutputFormat.Folder; } - // Prepopluate a few key strings based on DatItem type - string crc = null; - string sha1 = null; - if (datItem.ItemType == ItemType.Rom) + // If we have a disk, change it into a Rom for later use + if (datItem.ItemType == ItemType.Disk) { - crc = ((Rom)datItem).CRC; - sha1 = ((Rom)datItem).SHA1; - } - else if (datItem.ItemType == ItemType.Disk) - { - crc = ""; - sha1 = ((Disk)datItem).SHA1; + datItem = ((Disk)datItem).ConvertToRom(); } + // Prepopluate a few key strings + string crc = ((Rom)datItem).CRC ?? string.Empty; + string sha1 = ((Rom)datItem).SHA1 ?? string.Empty; + // Find if the file has duplicates in the DAT bool hasDuplicates = datItem.HasDuplicates(this); @@ -5503,7 +5499,7 @@ namespace SabreTools.Library.DatFiles { Globals.Logger.Error("Datfile {0} could not be written out: {1}", outfile, ex.ToString()); } - + }); } catch (Exception ex) diff --git a/SabreTools.Library/DatItems/Disk.cs b/SabreTools.Library/DatItems/Disk.cs index a62b20a2..56a1e1d7 100644 --- a/SabreTools.Library/DatItems/Disk.cs +++ b/SabreTools.Library/DatItems/Disk.cs @@ -180,6 +180,65 @@ namespace SabreTools.Library.DatItems }; } + /// + /// Convert a disk to the closest Rom approximation + /// + /// + public Rom ConvertToRom() + { + var rom = new Rom() + { + Name = this.Name, + ItemType = ItemType.Rom, + DupeType = this.DupeType, + + CRC = null, + MD5 = this.MD5, + SHA1 = this.SHA1, + SHA256 = this.SHA256, + SHA384 = this.SHA384, + SHA512 = this.SHA512, + + MergeTag = this.MergeTag, + Region = this.Region, + ItemStatus = this.ItemStatus, + Optional = this.Optional, + + MachineName = this.MachineName, + Comment = this.Comment, + MachineDescription = this.MachineDescription, + Year = this.Year, + Manufacturer = this.Manufacturer, + Publisher = this.Publisher, + RomOf = this.RomOf, + CloneOf = this.CloneOf, + SampleOf = this.SampleOf, + Supported = this.Supported, + SourceFile = this.SourceFile, + Runnable = this.Runnable, + Board = this.Board, + RebuildTo = this.RebuildTo, + Devices = this.Devices, + SlotOptions = this.SlotOptions, + Infos = this.Infos, + MachineType = this.MachineType, + + PartName = this.PartName, + PartInterface = this.PartInterface, + Features = this.Features, + AreaName = this.AreaName, + AreaSize = this.AreaSize, + + SystemID = this.SystemID, + System = this.System, + SourceID = this.SourceID, + Source = this.Source, + Remove = this.Remove, + }; + + return rom; + } + #endregion #region Comparision Methods