diff --git a/SabreTools.DatItems/DatItemTool.cs b/SabreTools.DatItems/DatItemTool.cs index b1225371..d9e53c10 100644 --- a/SabreTools.DatItems/DatItemTool.cs +++ b/SabreTools.DatItems/DatItemTool.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; using SabreTools.Core; @@ -9,1053 +8,10 @@ using SabreTools.Core.Tools; namespace SabreTools.DatItems { /// - /// Manipulate DatItems + /// Set fields on DatItems /// public static class DatItemTool { - #region Field Replacement - - /// - /// Replace fields with given values - /// - /// DatItem to replace fields in - /// DatItem to pull new information from - /// List of fields representing what should be updated - public static void ReplaceFields(DatItem datItem, DatItem repDatItem, List datItemFields) - { - if (datItem == null || repDatItem == null || datItemFields == null) - return; - - #region Common - - if (datItem.ItemType != repDatItem.ItemType) - return; - - if (datItemFields.Contains(DatItemField.Name)) - datItem.SetName(repDatItem.GetName()); - - #endregion - - #region Item-Specific - - if (datItem is Adjuster) ReplaceFields(datItem as Adjuster, repDatItem as Adjuster, datItemFields); - else if (datItem is Analog) ReplaceFields(datItem as Analog, repDatItem as Analog, datItemFields); - else if (datItem is BiosSet) ReplaceFields(datItem as BiosSet, repDatItem as BiosSet, datItemFields); - else if (datItem is Chip) ReplaceFields(datItem as Chip, repDatItem as Chip, datItemFields); - else if (datItem is Condition) ReplaceFields(datItem as Condition, repDatItem as Condition, datItemFields); - else if (datItem is Configuration) ReplaceFields(datItem as Configuration, repDatItem as Configuration, datItemFields); - else if (datItem is Control) ReplaceFields(datItem as Control, repDatItem as Control, datItemFields); - else if (datItem is DataArea) ReplaceFields(datItem as DataArea, repDatItem as DataArea, datItemFields); - else if (datItem is Device) ReplaceFields(datItem as Device, repDatItem as Device, datItemFields); - else if (datItem is DipSwitch) ReplaceFields(datItem as DipSwitch, repDatItem as DipSwitch, datItemFields); - else if (datItem is Disk) ReplaceFields(datItem as Disk, repDatItem as Disk, datItemFields); - else if (datItem is DiskArea) ReplaceFields(datItem as DiskArea, repDatItem as DiskArea, datItemFields); - else if (datItem is Display) ReplaceFields(datItem as Display, repDatItem as Display, datItemFields); - else if (datItem is Driver) ReplaceFields(datItem as Driver, repDatItem as Driver, datItemFields); - else if (datItem is Extension) ReplaceFields(datItem as Extension, repDatItem as Extension, datItemFields); - else if (datItem is Feature) ReplaceFields(datItem as Feature, repDatItem as Feature, datItemFields); - else if (datItem is Info) ReplaceFields(datItem as Info, repDatItem as Info, datItemFields); - else if (datItem is Input) ReplaceFields(datItem as Input, repDatItem as Input, datItemFields); - else if (datItem is Instance) ReplaceFields(datItem as Instance, repDatItem as Instance, datItemFields); - else if (datItem is Location) ReplaceFields(datItem as Location, repDatItem as Location, datItemFields); - else if (datItem is Media) ReplaceFields(datItem as Media, repDatItem as Media, datItemFields); - else if (datItem is Part) ReplaceFields(datItem as Part, repDatItem as Part, datItemFields); - else if (datItem is PartFeature) ReplaceFields(datItem as PartFeature, repDatItem as PartFeature, datItemFields); - else if (datItem is Port) ReplaceFields(datItem as Port, repDatItem as Port, datItemFields); - else if (datItem is RamOption) ReplaceFields(datItem as RamOption, repDatItem as RamOption, datItemFields); - else if (datItem is Release) ReplaceFields(datItem as Release, repDatItem as Release, datItemFields); - else if (datItem is Rom) ReplaceFields(datItem as Rom, repDatItem as Rom, datItemFields); - else if (datItem is Setting) ReplaceFields(datItem as Setting, repDatItem as Setting, datItemFields); - else if (datItem is SharedFeature) ReplaceFields(datItem as SharedFeature, repDatItem as SharedFeature, datItemFields); - else if (datItem is Slot) ReplaceFields(datItem as Slot, repDatItem as Slot, datItemFields); - else if (datItem is SlotOption) ReplaceFields(datItem as SlotOption, repDatItem as SlotOption, datItemFields); - else if (datItem is SoftwareList) ReplaceFields(datItem as SoftwareList, repDatItem as SoftwareList, datItemFields); - else if (datItem is Sound) ReplaceFields(datItem as Sound, repDatItem as Sound, datItemFields); - - #endregion - } - - /// - /// Replace fields with given values - /// - /// Machine to replace fields in - /// Machine to pull new information from - /// List of fields representing what should be updated - /// True if descriptions should only be replaced if the game name is the same, false otherwise - public static void ReplaceFields(Machine machine, Machine repMachine, List machineFields, bool onlySame) - { - #region Common - - if (machineFields.Contains(MachineField.Name)) - machine.Name = repMachine.Name; - - if (machineFields.Contains(MachineField.Comment)) - machine.Comment = repMachine.Comment; - - if (machineFields.Contains(MachineField.Description)) - { - if (!onlySame || (onlySame && machine.Name == machine.Description)) - machine.Description = repMachine.Description; - } - - if (machineFields.Contains(MachineField.Year)) - machine.Year = repMachine.Year; - - if (machineFields.Contains(MachineField.Manufacturer)) - machine.Manufacturer = repMachine.Manufacturer; - - if (machineFields.Contains(MachineField.Publisher)) - machine.Publisher = repMachine.Publisher; - - if (machineFields.Contains(MachineField.Category)) - machine.Category = repMachine.Category; - - if (machineFields.Contains(MachineField.RomOf)) - machine.RomOf = repMachine.RomOf; - - if (machineFields.Contains(MachineField.CloneOf)) - machine.CloneOf = repMachine.CloneOf; - - if (machineFields.Contains(MachineField.SampleOf)) - machine.SampleOf = repMachine.SampleOf; - - if (machineFields.Contains(MachineField.Type)) - machine.MachineType = repMachine.MachineType; - - #endregion - - #region AttractMode - - if (machineFields.Contains(MachineField.Players)) - machine.Players = repMachine.Players; - - if (machineFields.Contains(MachineField.Rotation)) - machine.Rotation = repMachine.Rotation; - - if (machineFields.Contains(MachineField.Control)) - machine.Control = repMachine.Control; - - if (machineFields.Contains(MachineField.Status)) - machine.Status = repMachine.Status; - - if (machineFields.Contains(MachineField.DisplayCount)) - machine.DisplayCount = repMachine.DisplayCount; - - if (machineFields.Contains(MachineField.DisplayType)) - machine.DisplayType = repMachine.DisplayType; - - if (machineFields.Contains(MachineField.Buttons)) - machine.Buttons = repMachine.Buttons; - - #endregion - - #region ListXML - - if (machineFields.Contains(MachineField.History)) - machine.History = repMachine.History; - - if (machineFields.Contains(MachineField.SourceFile)) - machine.SourceFile = repMachine.SourceFile; - - if (machineFields.Contains(MachineField.Runnable)) - machine.Runnable = repMachine.Runnable; - - #endregion - - #region Logiqx - - if (machineFields.Contains(MachineField.Board)) - machine.Board = repMachine.Board; - - if (machineFields.Contains(MachineField.RebuildTo)) - machine.RebuildTo = repMachine.RebuildTo; - - #endregion - - #region Logiqx EmuArc - - if (machineFields.Contains(MachineField.TitleID)) - machine.TitleID = repMachine.TitleID; - - if (machineFields.Contains(MachineField.Developer)) - machine.Developer = repMachine.Developer; - - if (machineFields.Contains(MachineField.Genre)) - machine.Genre = repMachine.Genre; - - if (machineFields.Contains(MachineField.Subgenre)) - machine.Subgenre = repMachine.Subgenre; - - if (machineFields.Contains(MachineField.Ratings)) - machine.Ratings = repMachine.Ratings; - - if (machineFields.Contains(MachineField.Score)) - machine.Score = repMachine.Score; - - if (machineFields.Contains(MachineField.Enabled)) - machine.Enabled = repMachine.Enabled; - - if (machineFields.Contains(MachineField.CRC)) - machine.Crc = repMachine.Crc; - - if (machineFields.Contains(MachineField.RelatedTo)) - machine.RelatedTo = repMachine.RelatedTo; - - #endregion - - #region OpenMSX - - if (machineFields.Contains(MachineField.GenMSXID)) - machine.GenMSXID = repMachine.GenMSXID; - - if (machineFields.Contains(MachineField.System)) - machine.System = repMachine.System; - - if (machineFields.Contains(MachineField.Country)) - machine.Country = repMachine.Country; - - #endregion - - #region SoftwareList - - if (machineFields.Contains(MachineField.Supported)) - machine.Supported = repMachine.Supported; - - #endregion - } - - /// - /// Replace fields with given values - /// - /// Adjuster to remove replace fields in - /// Adjuster to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Adjuster adjuster, Adjuster newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Default)) - adjuster.Default = newItem.Default; - - // Condition_* doesn't make sense here - // since not every condition under the other item - // can replace every condition under this item - } - - /// - /// Replace fields with given values - /// - /// Analog to remove replace fields in - /// Analog to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Analog analog, Analog newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Analog_Mask)) - analog.Mask = newItem.Mask; - } - - /// - /// Replace fields with given values - /// - /// BiosSet to remove replace fields in - /// BiosSet to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(BiosSet biosSet, BiosSet newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Description)) - biosSet.Description = newItem.Description; - - if (datItemFields.Contains(DatItemField.Default)) - biosSet.Default = newItem.Default; - } - - /// - /// Replace fields with given values - /// - /// Chip to remove replace fields in - /// Chip to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Chip chip, Chip newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Tag)) - chip.Tag = newItem.Tag; - - if (datItemFields.Contains(DatItemField.ChipType)) - chip.ChipType = newItem.ChipType; - - if (datItemFields.Contains(DatItemField.Clock)) - chip.Clock = newItem.Clock; - } - - /// - /// Replace fields with given values - /// - /// Condition to remove replace fields in - /// Condition to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Condition condition, Condition newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Tag)) - condition.Tag = newItem.Tag; - else if (datItemFields.Contains(DatItemField.Condition_Tag)) - condition.Tag = newItem.Tag; - - if (datItemFields.Contains(DatItemField.Mask)) - condition.Mask = newItem.Mask; - else if (datItemFields.Contains(DatItemField.Condition_Mask)) - condition.Mask = newItem.Mask; - - if (datItemFields.Contains(DatItemField.Relation)) - condition.Relation = newItem.Relation; - else if (datItemFields.Contains(DatItemField.Condition_Relation)) - condition.Relation = newItem.Relation; - - if (datItemFields.Contains(DatItemField.Value)) - condition.Value = newItem.Value; - else if (datItemFields.Contains(DatItemField.Condition_Value)) - condition.Value = newItem.Value; - } - - /// - /// Replace fields with given values - /// - /// Configuration to remove replace fields in - /// Configuration to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Configuration configuration, Configuration newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Tag)) - configuration.Tag = newItem.Tag; - - if (datItemFields.Contains(DatItemField.Mask)) - configuration.Mask = newItem.Mask; - - // Condition_* doesn't make sense here - // since not every condition under the other item - // can replace every condition under this item - - // Location_* doesn't make sense here - // since not every location under the other item - // can replace every location under this item - - // Setting_* doesn't make sense here - // since not every setting under the other item - // can replace every setting under this item - } - - /// - /// Replace fields with given values - /// - /// Control to remove replace fields in - /// Control to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Control control, Control newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Control_Type)) - control.ControlType = newItem.ControlType; - - if (datItemFields.Contains(DatItemField.Control_Player)) - control.Player = newItem.Player; - - if (datItemFields.Contains(DatItemField.Control_Buttons)) - control.Buttons = newItem.Buttons; - - if (datItemFields.Contains(DatItemField.Control_RequiredButtons)) - control.RequiredButtons = newItem.RequiredButtons; - - if (datItemFields.Contains(DatItemField.Control_Minimum)) - control.Minimum = newItem.Minimum; - - if (datItemFields.Contains(DatItemField.Control_Maximum)) - control.Maximum = newItem.Maximum; - - if (datItemFields.Contains(DatItemField.Control_Sensitivity)) - control.Sensitivity = newItem.Sensitivity; - - if (datItemFields.Contains(DatItemField.Control_KeyDelta)) - control.KeyDelta = newItem.KeyDelta; - - if (datItemFields.Contains(DatItemField.Control_Reverse)) - control.Reverse = newItem.Reverse; - - if (datItemFields.Contains(DatItemField.Control_Ways)) - control.Ways = newItem.Ways; - - if (datItemFields.Contains(DatItemField.Control_Ways2)) - control.Ways2 = newItem.Ways2; - - if (datItemFields.Contains(DatItemField.Control_Ways3)) - control.Ways3 = newItem.Ways3; - } - - /// - /// Replace fields with given values - /// - /// DataArea to remove replace fields in - /// DataArea to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(DataArea dataArea, DataArea newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.AreaName)) - dataArea.Name = newItem.Name; - - if (datItemFields.Contains(DatItemField.AreaSize)) - dataArea.Size = newItem.Size; - - if (datItemFields.Contains(DatItemField.AreaWidth)) - dataArea.Width = newItem.Width; - - if (datItemFields.Contains(DatItemField.AreaEndianness)) - dataArea.Endianness = newItem.Endianness; - } - - /// - /// Replace fields with given values - /// - /// Device to remove replace fields in - /// Device to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Device device, Device newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.DeviceType)) - device.DeviceType = newItem.DeviceType; - - if (datItemFields.Contains(DatItemField.Tag)) - device.Tag = newItem.Tag; - - if (datItemFields.Contains(DatItemField.FixedImage)) - device.FixedImage = newItem.FixedImage; - - if (datItemFields.Contains(DatItemField.Mandatory)) - device.Mandatory = newItem.Mandatory; - - if (datItemFields.Contains(DatItemField.Interface)) - device.Interface = newItem.Interface; - - // Instance_* doesn't make sense here - // since not every instance under the other item - // can replace every instance under this item - - // Extension_* doesn't make sense here - // since not every extension under the other item - // can replace every extension under this item - } - - /// - /// Replace fields with given values - /// - /// DipSwitch to remove replace fields in - /// DipSwitch to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(DipSwitch dipSwitch, DipSwitch newItem, List datItemFields) - { - #region Common - - if (datItemFields.Contains(DatItemField.Tag)) - dipSwitch.Tag = newItem.Tag; - - if (datItemFields.Contains(DatItemField.Mask)) - dipSwitch.Mask = newItem.Mask; - - // Condition_* doesn't make sense here - // since not every condition under the other item - // can replace every condition under this item - - // Location_* doesn't make sense here - // since not every location under the other item - // can replace every location under this item - - // Setting_* doesn't make sense here - // since not every value under the other item - // can replace every value under this item - - #endregion - - #region SoftwareList - - if (dipSwitch.PartSpecified && newItem.PartSpecified) - ReplaceFields(dipSwitch.Part, newItem.Part, datItemFields); - - #endregion - } - - /// - /// Replace fields with given values - /// - /// Disk to remove replace fields in - /// Disk to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Disk disk, Disk newItem, List datItemFields) - { - #region Common - - if (datItemFields.Contains(DatItemField.MD5)) - { - if (string.IsNullOrEmpty(disk.MD5) && !string.IsNullOrEmpty(newItem.MD5)) - disk.MD5 = newItem.MD5; - } - - if (datItemFields.Contains(DatItemField.SHA1)) - { - if (string.IsNullOrEmpty(disk.SHA1) && !string.IsNullOrEmpty(newItem.SHA1)) - disk.SHA1 = newItem.SHA1; - } - - if (datItemFields.Contains(DatItemField.Merge)) - disk.MergeTag = newItem.MergeTag; - - if (datItemFields.Contains(DatItemField.Region)) - disk.Region = newItem.Region; - - if (datItemFields.Contains(DatItemField.Index)) - disk.Index = newItem.Index; - - if (datItemFields.Contains(DatItemField.Writable)) - disk.Writable = newItem.Writable; - - if (datItemFields.Contains(DatItemField.Status)) - disk.ItemStatus = newItem.ItemStatus; - - if (datItemFields.Contains(DatItemField.Optional)) - disk.Optional = newItem.Optional; - - #endregion - - #region SoftwareList - - if (disk.DiskAreaSpecified && newItem.DiskAreaSpecified) - ReplaceFields(disk.DiskArea, newItem.DiskArea, datItemFields); - - if (disk.PartSpecified && newItem.PartSpecified) - ReplaceFields(disk.Part, newItem.Part, datItemFields); - - #endregion - } - - /// - /// Replace fields with given values - /// - /// DiskArea to remove replace fields in - /// DiskArea to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(DiskArea diskArea, DiskArea newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.AreaName)) - diskArea.Name = newItem.Name; - } - - /// - /// Replace fields with given values - /// - /// Display to remove replace fields in - /// Display to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Display display, Display newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Tag)) - display.Tag = newItem.Tag; - - if (datItemFields.Contains(DatItemField.DisplayType)) - display.DisplayType = newItem.DisplayType; - - if (datItemFields.Contains(DatItemField.Rotate)) - display.Rotate = newItem.Rotate; - - if (datItemFields.Contains(DatItemField.FlipX)) - display.FlipX = newItem.FlipX; - - if (datItemFields.Contains(DatItemField.Width)) - display.Width = newItem.Width; - - if (datItemFields.Contains(DatItemField.Height)) - display.Height = newItem.Height; - - if (datItemFields.Contains(DatItemField.Refresh)) - display.Refresh = newItem.Refresh; - - if (datItemFields.Contains(DatItemField.PixClock)) - display.PixClock = newItem.PixClock; - - if (datItemFields.Contains(DatItemField.HTotal)) - display.HTotal = newItem.HTotal; - - if (datItemFields.Contains(DatItemField.HBEnd)) - display.HBEnd = newItem.HBEnd; - - if (datItemFields.Contains(DatItemField.HBStart)) - display.HBStart = newItem.HBStart; - - if (datItemFields.Contains(DatItemField.VTotal)) - display.VTotal = newItem.VTotal; - - if (datItemFields.Contains(DatItemField.VBEnd)) - display.VBEnd = newItem.VBEnd; - - if (datItemFields.Contains(DatItemField.VBStart)) - display.VBStart = newItem.VBStart; - } - - /// - /// Replace fields with given values - /// - /// Driver to remove replace fields in - /// Driver to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Driver driver, Driver newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.SupportStatus)) - driver.Status = newItem.Status; - - if (datItemFields.Contains(DatItemField.EmulationStatus)) - driver.Emulation = newItem.Emulation; - - if (datItemFields.Contains(DatItemField.CocktailStatus)) - driver.Cocktail = newItem.Cocktail; - - if (datItemFields.Contains(DatItemField.SaveStateStatus)) - driver.SaveState = newItem.SaveState; - } - - /// - /// Replace fields with given values - /// - /// Extension to remove replace fields in - /// Extension to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Extension extension, Extension newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Extension_Name)) - extension.Name = newItem.Name; - } - - /// - /// Replace fields with given values - /// - /// Feature to remove replace fields in - /// Feature to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Feature feature, Feature newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.FeatureType)) - feature.Type = newItem.Type; - - if (datItemFields.Contains(DatItemField.FeatureStatus)) - feature.Status = newItem.Status; - - if (datItemFields.Contains(DatItemField.FeatureOverall)) - feature.Overall = newItem.Overall; - } - - /// - /// Replace fields with given values - /// - /// Info to remove replace fields in - /// Info to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Info info, Info newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Value)) - info.Value = newItem.Value; - } - - /// - /// Replace fields with given values - /// - /// Input to remove replace fields in - /// Input to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Input input, Input newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Service)) - input.Service = newItem.Service; - - if (datItemFields.Contains(DatItemField.Tilt)) - input.Tilt = newItem.Tilt; - - if (datItemFields.Contains(DatItemField.Players)) - input.Players = newItem.Players; - - if (datItemFields.Contains(DatItemField.Coins)) - input.Coins = newItem.Coins; - - // Control_* doesn't make sense here - // since not every control under the other item - // can replace every control under this item - } - - /// - /// Replace fields with given values - /// - /// Instance to remove replace fields in - /// Instance to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Instance instance, Instance newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Instance_Name)) - instance.Name = newItem.Name; - - if (datItemFields.Contains(DatItemField.Instance_BriefName)) - instance.BriefName = newItem.BriefName; - } - - /// - /// Replace fields with given values - /// - /// Location to remove replace fields in - /// Location to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Location location, Location newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Location_Name)) - location.Name = newItem.Name; - - if (datItemFields.Contains(DatItemField.Location_Number)) - location.Number = newItem.Number; - - if (datItemFields.Contains(DatItemField.Location_Inverted)) - location.Inverted = newItem.Inverted; - } - - /// - /// Replace fields with given values - /// - /// Media to remove replace fields in - /// Media to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Media media, Media newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.MD5)) - { - if (string.IsNullOrEmpty(media.MD5) && !string.IsNullOrEmpty(newItem.MD5)) - media.MD5 = newItem.MD5; - } - - if (datItemFields.Contains(DatItemField.SHA1)) - { - if (string.IsNullOrEmpty(media.SHA1) && !string.IsNullOrEmpty(newItem.SHA1)) - media.SHA1 = newItem.SHA1; - } - - if (datItemFields.Contains(DatItemField.SHA256)) - { - if (string.IsNullOrEmpty(media.SHA256) && !string.IsNullOrEmpty(newItem.SHA256)) - media.SHA256 = newItem.SHA256; - } - - if (datItemFields.Contains(DatItemField.SpamSum)) - { - if (string.IsNullOrEmpty(media.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum)) - media.SpamSum = newItem.SpamSum; - } - } - - /// - /// Replace fields with given values - /// - /// Part to remove replace fields in - /// Part to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Part part, Part newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Part_Name)) - part.Name = newItem.Name; - - if (datItemFields.Contains(DatItemField.Part_Interface)) - part.Interface = newItem.Interface; - - // Part_Feature_* doesn't make sense here - // since not every part feature under the other item - // can replace every part feature under this item - } - - /// - /// Replace fields with given values - /// - /// PartFeature to remove replace fields in - /// PartFeature to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(PartFeature partFeature, PartFeature newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Part_Feature_Name)) - partFeature.Name = newItem.Name; - - if (datItemFields.Contains(DatItemField.Part_Feature_Value)) - partFeature.Value = newItem.Value; - } - - /// - /// Replace fields with given values - /// - /// Port to remove replace fields in - /// Port to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Port port, Port newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Tag)) - port.Tag = newItem.Tag; - - // Analog_* doesn't make sense here - // since not every analog under the other item - // can replace every analog under this item - } - - /// - /// Replace fields with given values - /// - /// RamOption to remove replace fields in - /// RamOption to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(RamOption ramOption, RamOption newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Default)) - ramOption.Default = newItem.Default; - - if (datItemFields.Contains(DatItemField.Content)) - ramOption.Content = newItem.Content; - } - - /// - /// Replace fields with given values - /// - /// Release to remove replace fields in - /// Release to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Release release, Release newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Region)) - release.Region = newItem.Region; - - if (datItemFields.Contains(DatItemField.Language)) - release.Language = newItem.Language; - - if (datItemFields.Contains(DatItemField.Date)) - release.Date = newItem.Date; - - if (datItemFields.Contains(DatItemField.Default)) - release.Default = newItem.Default; - } - - /// - /// Replace fields with given values - /// - /// Rom to remove replace fields in - /// Rom to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Rom rom, Rom newItem, List datItemFields) - { - #region Common - - if (datItemFields.Contains(DatItemField.Bios)) - rom.Bios = newItem.Bios; - - if (datItemFields.Contains(DatItemField.Size)) - rom.Size = newItem.Size; - - if (datItemFields.Contains(DatItemField.CRC)) - { - if (string.IsNullOrEmpty(rom.CRC) && !string.IsNullOrEmpty(newItem.CRC)) - rom.CRC = newItem.CRC; - } - - if (datItemFields.Contains(DatItemField.MD5)) - { - if (string.IsNullOrEmpty(rom.MD5) && !string.IsNullOrEmpty(newItem.MD5)) - rom.MD5 = newItem.MD5; - } - - if (datItemFields.Contains(DatItemField.SHA1)) - { - if (string.IsNullOrEmpty(rom.SHA1) && !string.IsNullOrEmpty(newItem.SHA1)) - rom.SHA1 = newItem.SHA1; - } - - if (datItemFields.Contains(DatItemField.SHA256)) - { - if (string.IsNullOrEmpty(rom.SHA256) && !string.IsNullOrEmpty(newItem.SHA256)) - rom.SHA256 = newItem.SHA256; - } - - if (datItemFields.Contains(DatItemField.SHA384)) - { - if (string.IsNullOrEmpty(rom.SHA384) && !string.IsNullOrEmpty(newItem.SHA384)) - rom.SHA384 = newItem.SHA384; - } - - if (datItemFields.Contains(DatItemField.SHA512)) - { - if (string.IsNullOrEmpty(rom.SHA512) && !string.IsNullOrEmpty(newItem.SHA512)) - rom.SHA512 = newItem.SHA512; - } - - if (datItemFields.Contains(DatItemField.SpamSum)) - { - if (string.IsNullOrEmpty(rom.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum)) - rom.SpamSum = newItem.SpamSum; - } - - if (datItemFields.Contains(DatItemField.Merge)) - rom.MergeTag = newItem.MergeTag; - - if (datItemFields.Contains(DatItemField.Region)) - rom.Region = newItem.Region; - - if (datItemFields.Contains(DatItemField.Offset)) - rom.Offset = newItem.Offset; - - if (datItemFields.Contains(DatItemField.Date)) - rom.Date = newItem.Date; - - if (datItemFields.Contains(DatItemField.Status)) - rom.ItemStatus = newItem.ItemStatus; - - if (datItemFields.Contains(DatItemField.Optional)) - rom.Optional = newItem.Optional; - - if (datItemFields.Contains(DatItemField.Inverted)) - rom.Inverted = newItem.Inverted; - - #endregion - - #region AttractMode - - if (datItemFields.Contains(DatItemField.AltName)) - rom.AltName = newItem.AltName; - - if (datItemFields.Contains(DatItemField.AltTitle)) - rom.AltTitle = newItem.AltTitle; - - #endregion - - #region OpenMSX - - if (datItemFields.Contains(DatItemField.Original)) - rom.Original = newItem.Original; - - if (datItemFields.Contains(DatItemField.OpenMSXSubType)) - rom.OpenMSXSubType = newItem.OpenMSXSubType; - - if (datItemFields.Contains(DatItemField.OpenMSXType)) - rom.OpenMSXType = newItem.OpenMSXType; - - if (datItemFields.Contains(DatItemField.Remark)) - rom.Remark = newItem.Remark; - - if (datItemFields.Contains(DatItemField.Boot)) - rom.Boot = newItem.Boot; - - #endregion - - #region SoftwareList - - if (datItemFields.Contains(DatItemField.LoadFlag)) - rom.LoadFlag = newItem.LoadFlag; - - if (datItemFields.Contains(DatItemField.Value)) - rom.Value = newItem.Value; - - if (rom.DataAreaSpecified && newItem.DataAreaSpecified) - ReplaceFields(rom.DataArea, newItem.DataArea, datItemFields); - - if (rom.PartSpecified && newItem.PartSpecified) - ReplaceFields(rom.Part, newItem.Part, datItemFields); - - #endregion - } - - /// - /// Replace fields with given values - /// - /// Setting to remove replace fields in - /// Setting to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Setting setting, Setting newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Setting_Name)) - setting.Name = newItem.Name; - - if (datItemFields.Contains(DatItemField.Setting_Value)) - setting.Value = newItem.Value; - - if (datItemFields.Contains(DatItemField.Setting_Default)) - setting.Default = newItem.Default; - - // Condition_* doesn't make sense here - // since not every condition under the other item - // can replace every condition under this item - } - - /// - /// Replace fields with given values - /// - /// SharedFeature to remove replace fields in - /// SharedFeature to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(SharedFeature sharedFeature, SharedFeature newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Value)) - sharedFeature.Value = newItem.Value; - } - - /// - /// Replace fields with given values - /// - /// Slot to remove replace fields in - /// Slot to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Slot slot, Slot newItem, List datItemFields) - { - // SlotOption_* doesn't make sense here - // since not every slot option under the other item - // can replace every slot option under this item - } - - /// - /// Replace fields with given values - /// - /// SlotOption to remove replace fields in - /// SlotOption to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(SlotOption slotOption, SlotOption newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.SlotOption_Name)) - slotOption.Name = newItem.Name; - - if (datItemFields.Contains(DatItemField.SlotOption_DeviceName)) - slotOption.DeviceName = newItem.DeviceName; - - if (datItemFields.Contains(DatItemField.SlotOption_Default)) - slotOption.Default = newItem.Default; - } - - /// - /// Replace fields with given values - /// - /// SoftwareList to remove replace fields in - /// SoftwareList to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(SoftwareList softwareList, SoftwareList newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.SoftwareListStatus)) - softwareList.Status = newItem.Status; - - if (datItemFields.Contains(DatItemField.Filter)) - softwareList.Filter = newItem.Filter; - } - - /// - /// Replace fields with given values - /// - /// Sound to remove replace fields in - /// Sound to pull new information from - /// List of fields representing what should be updated - private static void ReplaceFields(Sound sound, Sound newItem, List datItemFields) - { - if (datItemFields.Contains(DatItemField.Channels)) - sound.Channels = newItem.Channels; - } - - #endregion - - #region Field Setting - /// /// Set fields with given values /// @@ -2102,21 +1058,5 @@ namespace SabreTools.DatItems if (datItemMappings.Keys.Contains(DatItemField.Channels)) sound.Channels = Utilities.CleanLong(datItemMappings[DatItemField.Channels]); } - - #endregion - - /// - /// Set internal names to match One Rom Per Game (ORPG) logic - /// - /// DatItem to run logic on - public static void SetOneRomPerGame(DatItem datItem) - { - if (datItem.GetName() == null) - return; - - string[] splitname = datItem.GetName().Split('.'); - datItem.Machine.Name += $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1))}"; - datItem.SetName(Path.GetFileName(datItem.GetName())); - } } } \ No newline at end of file diff --git a/SabreTools.DatTools/DatFileTool.cs b/SabreTools.DatTools/DatFileTool.cs index 5fc48dfa..1f7aa898 100644 --- a/SabreTools.DatTools/DatFileTool.cs +++ b/SabreTools.DatTools/DatFileTool.cs @@ -95,7 +95,7 @@ namespace SabreTools.DatTools // Replace fields from the first duplicate, if we have one if (dupes.Count > 0) - DatItemTool.ReplaceFields(newDatItem, dupes.First(), datItemFields); + Replacer.ReplaceFields(newDatItem, dupes.First(), datItemFields); newDatItems.Add(newDatItem); } @@ -122,7 +122,7 @@ namespace SabreTools.DatTools { DatItem newDatItem = datItem.Clone() as DatItem; if (datFile.Items.ContainsKey(key) && datFile.Items[key].Count() > 0) - DatItemTool.ReplaceFields(newDatItem.Machine, datFile.Items[key][0].Machine, machineFields, onlySame); + Replacer.ReplaceFields(newDatItem.Machine, datFile.Items[key][0].Machine, machineFields, onlySame); newDatItems.Add(newDatItem); } diff --git a/SabreTools.DatTools/Replacer.cs b/SabreTools.DatTools/Replacer.cs new file mode 100644 index 00000000..6d6570eb --- /dev/null +++ b/SabreTools.DatTools/Replacer.cs @@ -0,0 +1,1050 @@ +using System.Collections.Generic; + +using SabreTools.Core; +using SabreTools.DatItems; + +namespace SabreTools.DatTools +{ + /// + /// Replace fields in DatItems + /// + public static class Replacer + { + /// + /// Replace fields with given values + /// + /// DatItem to replace fields in + /// DatItem to pull new information from + /// List of fields representing what should be updated + public static void ReplaceFields(DatItem datItem, DatItem repDatItem, List datItemFields) + { + if (datItem == null || repDatItem == null || datItemFields == null) + return; + + #region Common + + if (datItem.ItemType != repDatItem.ItemType) + return; + + if (datItemFields.Contains(DatItemField.Name)) + datItem.SetName(repDatItem.GetName()); + + #endregion + + #region Item-Specific + + if (datItem is Adjuster) ReplaceFields(datItem as Adjuster, repDatItem as Adjuster, datItemFields); + else if (datItem is Analog) ReplaceFields(datItem as Analog, repDatItem as Analog, datItemFields); + else if (datItem is BiosSet) ReplaceFields(datItem as BiosSet, repDatItem as BiosSet, datItemFields); + else if (datItem is Chip) ReplaceFields(datItem as Chip, repDatItem as Chip, datItemFields); + else if (datItem is Condition) ReplaceFields(datItem as Condition, repDatItem as Condition, datItemFields); + else if (datItem is Configuration) ReplaceFields(datItem as Configuration, repDatItem as Configuration, datItemFields); + else if (datItem is Control) ReplaceFields(datItem as Control, repDatItem as Control, datItemFields); + else if (datItem is DataArea) ReplaceFields(datItem as DataArea, repDatItem as DataArea, datItemFields); + else if (datItem is Device) ReplaceFields(datItem as Device, repDatItem as Device, datItemFields); + else if (datItem is DipSwitch) ReplaceFields(datItem as DipSwitch, repDatItem as DipSwitch, datItemFields); + else if (datItem is Disk) ReplaceFields(datItem as Disk, repDatItem as Disk, datItemFields); + else if (datItem is DiskArea) ReplaceFields(datItem as DiskArea, repDatItem as DiskArea, datItemFields); + else if (datItem is Display) ReplaceFields(datItem as Display, repDatItem as Display, datItemFields); + else if (datItem is Driver) ReplaceFields(datItem as Driver, repDatItem as Driver, datItemFields); + else if (datItem is Extension) ReplaceFields(datItem as Extension, repDatItem as Extension, datItemFields); + else if (datItem is Feature) ReplaceFields(datItem as Feature, repDatItem as Feature, datItemFields); + else if (datItem is Info) ReplaceFields(datItem as Info, repDatItem as Info, datItemFields); + else if (datItem is Input) ReplaceFields(datItem as Input, repDatItem as Input, datItemFields); + else if (datItem is Instance) ReplaceFields(datItem as Instance, repDatItem as Instance, datItemFields); + else if (datItem is Location) ReplaceFields(datItem as Location, repDatItem as Location, datItemFields); + else if (datItem is Media) ReplaceFields(datItem as Media, repDatItem as Media, datItemFields); + else if (datItem is Part) ReplaceFields(datItem as Part, repDatItem as Part, datItemFields); + else if (datItem is PartFeature) ReplaceFields(datItem as PartFeature, repDatItem as PartFeature, datItemFields); + else if (datItem is Port) ReplaceFields(datItem as Port, repDatItem as Port, datItemFields); + else if (datItem is RamOption) ReplaceFields(datItem as RamOption, repDatItem as RamOption, datItemFields); + else if (datItem is Release) ReplaceFields(datItem as Release, repDatItem as Release, datItemFields); + else if (datItem is Rom) ReplaceFields(datItem as Rom, repDatItem as Rom, datItemFields); + else if (datItem is Setting) ReplaceFields(datItem as Setting, repDatItem as Setting, datItemFields); + else if (datItem is SharedFeature) ReplaceFields(datItem as SharedFeature, repDatItem as SharedFeature, datItemFields); + else if (datItem is Slot) ReplaceFields(datItem as Slot, repDatItem as Slot, datItemFields); + else if (datItem is SlotOption) ReplaceFields(datItem as SlotOption, repDatItem as SlotOption, datItemFields); + else if (datItem is SoftwareList) ReplaceFields(datItem as SoftwareList, repDatItem as SoftwareList, datItemFields); + else if (datItem is Sound) ReplaceFields(datItem as Sound, repDatItem as Sound, datItemFields); + + #endregion + } + + /// + /// Replace fields with given values + /// + /// Machine to replace fields in + /// Machine to pull new information from + /// List of fields representing what should be updated + /// True if descriptions should only be replaced if the game name is the same, false otherwise + public static void ReplaceFields(Machine machine, Machine repMachine, List machineFields, bool onlySame) + { + #region Common + + if (machineFields.Contains(MachineField.Name)) + machine.Name = repMachine.Name; + + if (machineFields.Contains(MachineField.Comment)) + machine.Comment = repMachine.Comment; + + if (machineFields.Contains(MachineField.Description)) + { + if (!onlySame || (onlySame && machine.Name == machine.Description)) + machine.Description = repMachine.Description; + } + + if (machineFields.Contains(MachineField.Year)) + machine.Year = repMachine.Year; + + if (machineFields.Contains(MachineField.Manufacturer)) + machine.Manufacturer = repMachine.Manufacturer; + + if (machineFields.Contains(MachineField.Publisher)) + machine.Publisher = repMachine.Publisher; + + if (machineFields.Contains(MachineField.Category)) + machine.Category = repMachine.Category; + + if (machineFields.Contains(MachineField.RomOf)) + machine.RomOf = repMachine.RomOf; + + if (machineFields.Contains(MachineField.CloneOf)) + machine.CloneOf = repMachine.CloneOf; + + if (machineFields.Contains(MachineField.SampleOf)) + machine.SampleOf = repMachine.SampleOf; + + if (machineFields.Contains(MachineField.Type)) + machine.MachineType = repMachine.MachineType; + + #endregion + + #region AttractMode + + if (machineFields.Contains(MachineField.Players)) + machine.Players = repMachine.Players; + + if (machineFields.Contains(MachineField.Rotation)) + machine.Rotation = repMachine.Rotation; + + if (machineFields.Contains(MachineField.Control)) + machine.Control = repMachine.Control; + + if (machineFields.Contains(MachineField.Status)) + machine.Status = repMachine.Status; + + if (machineFields.Contains(MachineField.DisplayCount)) + machine.DisplayCount = repMachine.DisplayCount; + + if (machineFields.Contains(MachineField.DisplayType)) + machine.DisplayType = repMachine.DisplayType; + + if (machineFields.Contains(MachineField.Buttons)) + machine.Buttons = repMachine.Buttons; + + #endregion + + #region ListXML + + if (machineFields.Contains(MachineField.History)) + machine.History = repMachine.History; + + if (machineFields.Contains(MachineField.SourceFile)) + machine.SourceFile = repMachine.SourceFile; + + if (machineFields.Contains(MachineField.Runnable)) + machine.Runnable = repMachine.Runnable; + + #endregion + + #region Logiqx + + if (machineFields.Contains(MachineField.Board)) + machine.Board = repMachine.Board; + + if (machineFields.Contains(MachineField.RebuildTo)) + machine.RebuildTo = repMachine.RebuildTo; + + #endregion + + #region Logiqx EmuArc + + if (machineFields.Contains(MachineField.TitleID)) + machine.TitleID = repMachine.TitleID; + + if (machineFields.Contains(MachineField.Developer)) + machine.Developer = repMachine.Developer; + + if (machineFields.Contains(MachineField.Genre)) + machine.Genre = repMachine.Genre; + + if (machineFields.Contains(MachineField.Subgenre)) + machine.Subgenre = repMachine.Subgenre; + + if (machineFields.Contains(MachineField.Ratings)) + machine.Ratings = repMachine.Ratings; + + if (machineFields.Contains(MachineField.Score)) + machine.Score = repMachine.Score; + + if (machineFields.Contains(MachineField.Enabled)) + machine.Enabled = repMachine.Enabled; + + if (machineFields.Contains(MachineField.CRC)) + machine.Crc = repMachine.Crc; + + if (machineFields.Contains(MachineField.RelatedTo)) + machine.RelatedTo = repMachine.RelatedTo; + + #endregion + + #region OpenMSX + + if (machineFields.Contains(MachineField.GenMSXID)) + machine.GenMSXID = repMachine.GenMSXID; + + if (machineFields.Contains(MachineField.System)) + machine.System = repMachine.System; + + if (machineFields.Contains(MachineField.Country)) + machine.Country = repMachine.Country; + + #endregion + + #region SoftwareList + + if (machineFields.Contains(MachineField.Supported)) + machine.Supported = repMachine.Supported; + + #endregion + } + + /// + /// Replace fields with given values + /// + /// Adjuster to remove replace fields in + /// Adjuster to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Adjuster adjuster, Adjuster newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Default)) + adjuster.Default = newItem.Default; + + // Condition_* doesn't make sense here + // since not every condition under the other item + // can replace every condition under this item + } + + /// + /// Replace fields with given values + /// + /// Analog to remove replace fields in + /// Analog to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Analog analog, Analog newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Analog_Mask)) + analog.Mask = newItem.Mask; + } + + /// + /// Replace fields with given values + /// + /// BiosSet to remove replace fields in + /// BiosSet to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(BiosSet biosSet, BiosSet newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Description)) + biosSet.Description = newItem.Description; + + if (datItemFields.Contains(DatItemField.Default)) + biosSet.Default = newItem.Default; + } + + /// + /// Replace fields with given values + /// + /// Chip to remove replace fields in + /// Chip to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Chip chip, Chip newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Tag)) + chip.Tag = newItem.Tag; + + if (datItemFields.Contains(DatItemField.ChipType)) + chip.ChipType = newItem.ChipType; + + if (datItemFields.Contains(DatItemField.Clock)) + chip.Clock = newItem.Clock; + } + + /// + /// Replace fields with given values + /// + /// Condition to remove replace fields in + /// Condition to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Condition condition, Condition newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Tag)) + condition.Tag = newItem.Tag; + else if (datItemFields.Contains(DatItemField.Condition_Tag)) + condition.Tag = newItem.Tag; + + if (datItemFields.Contains(DatItemField.Mask)) + condition.Mask = newItem.Mask; + else if (datItemFields.Contains(DatItemField.Condition_Mask)) + condition.Mask = newItem.Mask; + + if (datItemFields.Contains(DatItemField.Relation)) + condition.Relation = newItem.Relation; + else if (datItemFields.Contains(DatItemField.Condition_Relation)) + condition.Relation = newItem.Relation; + + if (datItemFields.Contains(DatItemField.Value)) + condition.Value = newItem.Value; + else if (datItemFields.Contains(DatItemField.Condition_Value)) + condition.Value = newItem.Value; + } + + /// + /// Replace fields with given values + /// + /// Configuration to remove replace fields in + /// Configuration to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Configuration configuration, Configuration newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Tag)) + configuration.Tag = newItem.Tag; + + if (datItemFields.Contains(DatItemField.Mask)) + configuration.Mask = newItem.Mask; + + // Condition_* doesn't make sense here + // since not every condition under the other item + // can replace every condition under this item + + // Location_* doesn't make sense here + // since not every location under the other item + // can replace every location under this item + + // Setting_* doesn't make sense here + // since not every setting under the other item + // can replace every setting under this item + } + + /// + /// Replace fields with given values + /// + /// Control to remove replace fields in + /// Control to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Control control, Control newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Control_Type)) + control.ControlType = newItem.ControlType; + + if (datItemFields.Contains(DatItemField.Control_Player)) + control.Player = newItem.Player; + + if (datItemFields.Contains(DatItemField.Control_Buttons)) + control.Buttons = newItem.Buttons; + + if (datItemFields.Contains(DatItemField.Control_RequiredButtons)) + control.RequiredButtons = newItem.RequiredButtons; + + if (datItemFields.Contains(DatItemField.Control_Minimum)) + control.Minimum = newItem.Minimum; + + if (datItemFields.Contains(DatItemField.Control_Maximum)) + control.Maximum = newItem.Maximum; + + if (datItemFields.Contains(DatItemField.Control_Sensitivity)) + control.Sensitivity = newItem.Sensitivity; + + if (datItemFields.Contains(DatItemField.Control_KeyDelta)) + control.KeyDelta = newItem.KeyDelta; + + if (datItemFields.Contains(DatItemField.Control_Reverse)) + control.Reverse = newItem.Reverse; + + if (datItemFields.Contains(DatItemField.Control_Ways)) + control.Ways = newItem.Ways; + + if (datItemFields.Contains(DatItemField.Control_Ways2)) + control.Ways2 = newItem.Ways2; + + if (datItemFields.Contains(DatItemField.Control_Ways3)) + control.Ways3 = newItem.Ways3; + } + + /// + /// Replace fields with given values + /// + /// DataArea to remove replace fields in + /// DataArea to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(DataArea dataArea, DataArea newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.AreaName)) + dataArea.Name = newItem.Name; + + if (datItemFields.Contains(DatItemField.AreaSize)) + dataArea.Size = newItem.Size; + + if (datItemFields.Contains(DatItemField.AreaWidth)) + dataArea.Width = newItem.Width; + + if (datItemFields.Contains(DatItemField.AreaEndianness)) + dataArea.Endianness = newItem.Endianness; + } + + /// + /// Replace fields with given values + /// + /// Device to remove replace fields in + /// Device to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Device device, Device newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.DeviceType)) + device.DeviceType = newItem.DeviceType; + + if (datItemFields.Contains(DatItemField.Tag)) + device.Tag = newItem.Tag; + + if (datItemFields.Contains(DatItemField.FixedImage)) + device.FixedImage = newItem.FixedImage; + + if (datItemFields.Contains(DatItemField.Mandatory)) + device.Mandatory = newItem.Mandatory; + + if (datItemFields.Contains(DatItemField.Interface)) + device.Interface = newItem.Interface; + + // Instance_* doesn't make sense here + // since not every instance under the other item + // can replace every instance under this item + + // Extension_* doesn't make sense here + // since not every extension under the other item + // can replace every extension under this item + } + + /// + /// Replace fields with given values + /// + /// DipSwitch to remove replace fields in + /// DipSwitch to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(DipSwitch dipSwitch, DipSwitch newItem, List datItemFields) + { + #region Common + + if (datItemFields.Contains(DatItemField.Tag)) + dipSwitch.Tag = newItem.Tag; + + if (datItemFields.Contains(DatItemField.Mask)) + dipSwitch.Mask = newItem.Mask; + + // Condition_* doesn't make sense here + // since not every condition under the other item + // can replace every condition under this item + + // Location_* doesn't make sense here + // since not every location under the other item + // can replace every location under this item + + // Setting_* doesn't make sense here + // since not every value under the other item + // can replace every value under this item + + #endregion + + #region SoftwareList + + if (dipSwitch.PartSpecified && newItem.PartSpecified) + ReplaceFields(dipSwitch.Part, newItem.Part, datItemFields); + + #endregion + } + + /// + /// Replace fields with given values + /// + /// Disk to remove replace fields in + /// Disk to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Disk disk, Disk newItem, List datItemFields) + { + #region Common + + if (datItemFields.Contains(DatItemField.MD5)) + { + if (string.IsNullOrEmpty(disk.MD5) && !string.IsNullOrEmpty(newItem.MD5)) + disk.MD5 = newItem.MD5; + } + + if (datItemFields.Contains(DatItemField.SHA1)) + { + if (string.IsNullOrEmpty(disk.SHA1) && !string.IsNullOrEmpty(newItem.SHA1)) + disk.SHA1 = newItem.SHA1; + } + + if (datItemFields.Contains(DatItemField.Merge)) + disk.MergeTag = newItem.MergeTag; + + if (datItemFields.Contains(DatItemField.Region)) + disk.Region = newItem.Region; + + if (datItemFields.Contains(DatItemField.Index)) + disk.Index = newItem.Index; + + if (datItemFields.Contains(DatItemField.Writable)) + disk.Writable = newItem.Writable; + + if (datItemFields.Contains(DatItemField.Status)) + disk.ItemStatus = newItem.ItemStatus; + + if (datItemFields.Contains(DatItemField.Optional)) + disk.Optional = newItem.Optional; + + #endregion + + #region SoftwareList + + if (disk.DiskAreaSpecified && newItem.DiskAreaSpecified) + ReplaceFields(disk.DiskArea, newItem.DiskArea, datItemFields); + + if (disk.PartSpecified && newItem.PartSpecified) + ReplaceFields(disk.Part, newItem.Part, datItemFields); + + #endregion + } + + /// + /// Replace fields with given values + /// + /// DiskArea to remove replace fields in + /// DiskArea to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(DiskArea diskArea, DiskArea newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.AreaName)) + diskArea.Name = newItem.Name; + } + + /// + /// Replace fields with given values + /// + /// Display to remove replace fields in + /// Display to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Display display, Display newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Tag)) + display.Tag = newItem.Tag; + + if (datItemFields.Contains(DatItemField.DisplayType)) + display.DisplayType = newItem.DisplayType; + + if (datItemFields.Contains(DatItemField.Rotate)) + display.Rotate = newItem.Rotate; + + if (datItemFields.Contains(DatItemField.FlipX)) + display.FlipX = newItem.FlipX; + + if (datItemFields.Contains(DatItemField.Width)) + display.Width = newItem.Width; + + if (datItemFields.Contains(DatItemField.Height)) + display.Height = newItem.Height; + + if (datItemFields.Contains(DatItemField.Refresh)) + display.Refresh = newItem.Refresh; + + if (datItemFields.Contains(DatItemField.PixClock)) + display.PixClock = newItem.PixClock; + + if (datItemFields.Contains(DatItemField.HTotal)) + display.HTotal = newItem.HTotal; + + if (datItemFields.Contains(DatItemField.HBEnd)) + display.HBEnd = newItem.HBEnd; + + if (datItemFields.Contains(DatItemField.HBStart)) + display.HBStart = newItem.HBStart; + + if (datItemFields.Contains(DatItemField.VTotal)) + display.VTotal = newItem.VTotal; + + if (datItemFields.Contains(DatItemField.VBEnd)) + display.VBEnd = newItem.VBEnd; + + if (datItemFields.Contains(DatItemField.VBStart)) + display.VBStart = newItem.VBStart; + } + + /// + /// Replace fields with given values + /// + /// Driver to remove replace fields in + /// Driver to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Driver driver, Driver newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.SupportStatus)) + driver.Status = newItem.Status; + + if (datItemFields.Contains(DatItemField.EmulationStatus)) + driver.Emulation = newItem.Emulation; + + if (datItemFields.Contains(DatItemField.CocktailStatus)) + driver.Cocktail = newItem.Cocktail; + + if (datItemFields.Contains(DatItemField.SaveStateStatus)) + driver.SaveState = newItem.SaveState; + } + + /// + /// Replace fields with given values + /// + /// Extension to remove replace fields in + /// Extension to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Extension extension, Extension newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Extension_Name)) + extension.Name = newItem.Name; + } + + /// + /// Replace fields with given values + /// + /// Feature to remove replace fields in + /// Feature to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Feature feature, Feature newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.FeatureType)) + feature.Type = newItem.Type; + + if (datItemFields.Contains(DatItemField.FeatureStatus)) + feature.Status = newItem.Status; + + if (datItemFields.Contains(DatItemField.FeatureOverall)) + feature.Overall = newItem.Overall; + } + + /// + /// Replace fields with given values + /// + /// Info to remove replace fields in + /// Info to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Info info, Info newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Value)) + info.Value = newItem.Value; + } + + /// + /// Replace fields with given values + /// + /// Input to remove replace fields in + /// Input to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Input input, Input newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Service)) + input.Service = newItem.Service; + + if (datItemFields.Contains(DatItemField.Tilt)) + input.Tilt = newItem.Tilt; + + if (datItemFields.Contains(DatItemField.Players)) + input.Players = newItem.Players; + + if (datItemFields.Contains(DatItemField.Coins)) + input.Coins = newItem.Coins; + + // Control_* doesn't make sense here + // since not every control under the other item + // can replace every control under this item + } + + /// + /// Replace fields with given values + /// + /// Instance to remove replace fields in + /// Instance to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Instance instance, Instance newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Instance_Name)) + instance.Name = newItem.Name; + + if (datItemFields.Contains(DatItemField.Instance_BriefName)) + instance.BriefName = newItem.BriefName; + } + + /// + /// Replace fields with given values + /// + /// Location to remove replace fields in + /// Location to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Location location, Location newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Location_Name)) + location.Name = newItem.Name; + + if (datItemFields.Contains(DatItemField.Location_Number)) + location.Number = newItem.Number; + + if (datItemFields.Contains(DatItemField.Location_Inverted)) + location.Inverted = newItem.Inverted; + } + + /// + /// Replace fields with given values + /// + /// Media to remove replace fields in + /// Media to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Media media, Media newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.MD5)) + { + if (string.IsNullOrEmpty(media.MD5) && !string.IsNullOrEmpty(newItem.MD5)) + media.MD5 = newItem.MD5; + } + + if (datItemFields.Contains(DatItemField.SHA1)) + { + if (string.IsNullOrEmpty(media.SHA1) && !string.IsNullOrEmpty(newItem.SHA1)) + media.SHA1 = newItem.SHA1; + } + + if (datItemFields.Contains(DatItemField.SHA256)) + { + if (string.IsNullOrEmpty(media.SHA256) && !string.IsNullOrEmpty(newItem.SHA256)) + media.SHA256 = newItem.SHA256; + } + + if (datItemFields.Contains(DatItemField.SpamSum)) + { + if (string.IsNullOrEmpty(media.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum)) + media.SpamSum = newItem.SpamSum; + } + } + + /// + /// Replace fields with given values + /// + /// Part to remove replace fields in + /// Part to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Part part, Part newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Part_Name)) + part.Name = newItem.Name; + + if (datItemFields.Contains(DatItemField.Part_Interface)) + part.Interface = newItem.Interface; + + // Part_Feature_* doesn't make sense here + // since not every part feature under the other item + // can replace every part feature under this item + } + + /// + /// Replace fields with given values + /// + /// PartFeature to remove replace fields in + /// PartFeature to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(PartFeature partFeature, PartFeature newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Part_Feature_Name)) + partFeature.Name = newItem.Name; + + if (datItemFields.Contains(DatItemField.Part_Feature_Value)) + partFeature.Value = newItem.Value; + } + + /// + /// Replace fields with given values + /// + /// Port to remove replace fields in + /// Port to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Port port, Port newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Tag)) + port.Tag = newItem.Tag; + + // Analog_* doesn't make sense here + // since not every analog under the other item + // can replace every analog under this item + } + + /// + /// Replace fields with given values + /// + /// RamOption to remove replace fields in + /// RamOption to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(RamOption ramOption, RamOption newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Default)) + ramOption.Default = newItem.Default; + + if (datItemFields.Contains(DatItemField.Content)) + ramOption.Content = newItem.Content; + } + + /// + /// Replace fields with given values + /// + /// Release to remove replace fields in + /// Release to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Release release, Release newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Region)) + release.Region = newItem.Region; + + if (datItemFields.Contains(DatItemField.Language)) + release.Language = newItem.Language; + + if (datItemFields.Contains(DatItemField.Date)) + release.Date = newItem.Date; + + if (datItemFields.Contains(DatItemField.Default)) + release.Default = newItem.Default; + } + + /// + /// Replace fields with given values + /// + /// Rom to remove replace fields in + /// Rom to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Rom rom, Rom newItem, List datItemFields) + { + #region Common + + if (datItemFields.Contains(DatItemField.Bios)) + rom.Bios = newItem.Bios; + + if (datItemFields.Contains(DatItemField.Size)) + rom.Size = newItem.Size; + + if (datItemFields.Contains(DatItemField.CRC)) + { + if (string.IsNullOrEmpty(rom.CRC) && !string.IsNullOrEmpty(newItem.CRC)) + rom.CRC = newItem.CRC; + } + + if (datItemFields.Contains(DatItemField.MD5)) + { + if (string.IsNullOrEmpty(rom.MD5) && !string.IsNullOrEmpty(newItem.MD5)) + rom.MD5 = newItem.MD5; + } + + if (datItemFields.Contains(DatItemField.SHA1)) + { + if (string.IsNullOrEmpty(rom.SHA1) && !string.IsNullOrEmpty(newItem.SHA1)) + rom.SHA1 = newItem.SHA1; + } + + if (datItemFields.Contains(DatItemField.SHA256)) + { + if (string.IsNullOrEmpty(rom.SHA256) && !string.IsNullOrEmpty(newItem.SHA256)) + rom.SHA256 = newItem.SHA256; + } + + if (datItemFields.Contains(DatItemField.SHA384)) + { + if (string.IsNullOrEmpty(rom.SHA384) && !string.IsNullOrEmpty(newItem.SHA384)) + rom.SHA384 = newItem.SHA384; + } + + if (datItemFields.Contains(DatItemField.SHA512)) + { + if (string.IsNullOrEmpty(rom.SHA512) && !string.IsNullOrEmpty(newItem.SHA512)) + rom.SHA512 = newItem.SHA512; + } + + if (datItemFields.Contains(DatItemField.SpamSum)) + { + if (string.IsNullOrEmpty(rom.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum)) + rom.SpamSum = newItem.SpamSum; + } + + if (datItemFields.Contains(DatItemField.Merge)) + rom.MergeTag = newItem.MergeTag; + + if (datItemFields.Contains(DatItemField.Region)) + rom.Region = newItem.Region; + + if (datItemFields.Contains(DatItemField.Offset)) + rom.Offset = newItem.Offset; + + if (datItemFields.Contains(DatItemField.Date)) + rom.Date = newItem.Date; + + if (datItemFields.Contains(DatItemField.Status)) + rom.ItemStatus = newItem.ItemStatus; + + if (datItemFields.Contains(DatItemField.Optional)) + rom.Optional = newItem.Optional; + + if (datItemFields.Contains(DatItemField.Inverted)) + rom.Inverted = newItem.Inverted; + + #endregion + + #region AttractMode + + if (datItemFields.Contains(DatItemField.AltName)) + rom.AltName = newItem.AltName; + + if (datItemFields.Contains(DatItemField.AltTitle)) + rom.AltTitle = newItem.AltTitle; + + #endregion + + #region OpenMSX + + if (datItemFields.Contains(DatItemField.Original)) + rom.Original = newItem.Original; + + if (datItemFields.Contains(DatItemField.OpenMSXSubType)) + rom.OpenMSXSubType = newItem.OpenMSXSubType; + + if (datItemFields.Contains(DatItemField.OpenMSXType)) + rom.OpenMSXType = newItem.OpenMSXType; + + if (datItemFields.Contains(DatItemField.Remark)) + rom.Remark = newItem.Remark; + + if (datItemFields.Contains(DatItemField.Boot)) + rom.Boot = newItem.Boot; + + #endregion + + #region SoftwareList + + if (datItemFields.Contains(DatItemField.LoadFlag)) + rom.LoadFlag = newItem.LoadFlag; + + if (datItemFields.Contains(DatItemField.Value)) + rom.Value = newItem.Value; + + if (rom.DataAreaSpecified && newItem.DataAreaSpecified) + ReplaceFields(rom.DataArea, newItem.DataArea, datItemFields); + + if (rom.PartSpecified && newItem.PartSpecified) + ReplaceFields(rom.Part, newItem.Part, datItemFields); + + #endregion + } + + /// + /// Replace fields with given values + /// + /// Setting to remove replace fields in + /// Setting to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Setting setting, Setting newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Setting_Name)) + setting.Name = newItem.Name; + + if (datItemFields.Contains(DatItemField.Setting_Value)) + setting.Value = newItem.Value; + + if (datItemFields.Contains(DatItemField.Setting_Default)) + setting.Default = newItem.Default; + + // Condition_* doesn't make sense here + // since not every condition under the other item + // can replace every condition under this item + } + + /// + /// Replace fields with given values + /// + /// SharedFeature to remove replace fields in + /// SharedFeature to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(SharedFeature sharedFeature, SharedFeature newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Value)) + sharedFeature.Value = newItem.Value; + } + + /// + /// Replace fields with given values + /// + /// Slot to remove replace fields in + /// Slot to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Slot slot, Slot newItem, List datItemFields) + { + // SlotOption_* doesn't make sense here + // since not every slot option under the other item + // can replace every slot option under this item + } + + /// + /// Replace fields with given values + /// + /// SlotOption to remove replace fields in + /// SlotOption to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(SlotOption slotOption, SlotOption newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.SlotOption_Name)) + slotOption.Name = newItem.Name; + + if (datItemFields.Contains(DatItemField.SlotOption_DeviceName)) + slotOption.DeviceName = newItem.DeviceName; + + if (datItemFields.Contains(DatItemField.SlotOption_Default)) + slotOption.Default = newItem.Default; + } + + /// + /// Replace fields with given values + /// + /// SoftwareList to remove replace fields in + /// SoftwareList to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(SoftwareList softwareList, SoftwareList newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.SoftwareListStatus)) + softwareList.Status = newItem.Status; + + if (datItemFields.Contains(DatItemField.Filter)) + softwareList.Filter = newItem.Filter; + } + + /// + /// Replace fields with given values + /// + /// Sound to remove replace fields in + /// Sound to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Sound sound, Sound newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Channels)) + sound.Channels = newItem.Channels; + } + } +} \ No newline at end of file diff --git a/SabreTools.Filtering/Cleaner.cs b/SabreTools.Filtering/Cleaner.cs index f182ffca..dbca758d 100644 --- a/SabreTools.Filtering/Cleaner.cs +++ b/SabreTools.Filtering/Cleaner.cs @@ -540,11 +540,25 @@ namespace SabreTools.Filtering List items = datFile.Items[key]; for (int i = 0; i < items.Count; i++) { - DatItemTool.SetOneRomPerGame(items[i]); + SetOneRomPerGame(items[i]); } }); } + /// + /// Set internal names to match One Rom Per Game (ORPG) logic + /// + /// DatItem to run logic on + internal void SetOneRomPerGame(DatItem datItem) + { + if (datItem.GetName() == null) + return; + + string[] splitname = datItem.GetName().Split('.'); + datItem.Machine.Name += $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1))}"; + datItem.SetName(Path.GetFileName(datItem.GetName())); + } + /// /// Strip the dates from the beginning of scene-style set names /// diff --git a/SabreTools.Filtering/Filter.cs b/SabreTools.Filtering/Filter.cs index 1b73d4ab..9adf52c8 100644 --- a/SabreTools.Filtering/Filter.cs +++ b/SabreTools.Filtering/Filter.cs @@ -396,7 +396,7 @@ namespace SabreTools.Filtering continue; // If the rom doesn't pass the filter, mark for removal - if (!PassesFilters(item)) + if (!PassesAllFilters(item)) { item.Remove = true; @@ -436,7 +436,7 @@ namespace SabreTools.Filtering /// /// DatItem to check /// True if the item passed the filter, false otherwise - internal bool PassesFilters(DatItem datItem) + internal bool PassesAllFilters(DatItem datItem) { // Null item means it will never pass if (datItem == null) diff --git a/SabreTools.Test/DatItems/DatItemToolTests.cs b/SabreTools.Test/DatItems/DatItemToolTests.cs index cc0cf8b0..10ac93d2 100644 --- a/SabreTools.Test/DatItems/DatItemToolTests.cs +++ b/SabreTools.Test/DatItems/DatItemToolTests.cs @@ -8,28 +8,6 @@ namespace SabreTools.Test.DatItems { public class DatItemToolTests { - [Fact] - public void ReplaceFieldsDatItemTest() - { - var datItem = CreateDatItem(); - var repDatItem = CreateDatItem(); - repDatItem.SetName("bar"); - var fields = new List { DatItemField.Name }; - DatItemTool.ReplaceFields(datItem, repDatItem, fields); - Assert.Equal("bar", datItem.GetName()); - } - - [Fact] - public void ReplaceFieldsMachineTest() - { - var datItem = CreateDatItem(); - var repDatItem = CreateDatItem(); - repDatItem.Machine.Name = "foo"; - var fields = new List { MachineField.Name }; - DatItemTool.ReplaceFields(datItem.Machine, repDatItem.Machine, fields, false); - Assert.Equal("foo", datItem.Machine.Name); - } - [Fact] public void SetFieldsDatItemTest() { @@ -48,16 +26,6 @@ namespace SabreTools.Test.DatItems Assert.Equal("foo", datItem.Machine.Name); } - [Fact] - public void SetOneRomPerGameTest() - { - var datItem = CreateDatItem(); - datItem.SetName("foo.bin"); - DatItemTool.SetOneRomPerGame(datItem); - Assert.Equal("foo.bin", datItem.GetName()); - Assert.Equal("bar/foo", datItem.Machine.Name); - } - /// /// Generate a consistent DatItem for testing /// diff --git a/SabreTools.Test/DatTools/ReplacerTests.cs b/SabreTools.Test/DatTools/ReplacerTests.cs new file mode 100644 index 00000000..30e0f449 --- /dev/null +++ b/SabreTools.Test/DatTools/ReplacerTests.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; + +using SabreTools.Core; +using SabreTools.DatItems; +using SabreTools.DatTools; +using Xunit; + +namespace SabreTools.Test.DatTools +{ + public class ReplacerTests + { + [Fact] + public void ReplaceFieldsDatItemTest() + { + var datItem = CreateDatItem(); + var repDatItem = CreateDatItem(); + repDatItem.SetName("bar"); + var fields = new List { DatItemField.Name }; + Replacer.ReplaceFields(datItem, repDatItem, fields); + Assert.Equal("bar", datItem.GetName()); + } + + [Fact] + public void ReplaceFieldsMachineTest() + { + var datItem = CreateDatItem(); + var repDatItem = CreateDatItem(); + repDatItem.Machine.Name = "foo"; + var fields = new List { MachineField.Name }; + Replacer.ReplaceFields(datItem.Machine, repDatItem.Machine, fields, false); + Assert.Equal("foo", datItem.Machine.Name); + } + + /// + /// Generate a consistent DatItem for testing + /// + private DatItem CreateDatItem() + { + return new Rom + { + Name = "foo", + Machine = new Machine + { + Name = "bar", + Description = "bar", + } + }; + } + } +} \ No newline at end of file diff --git a/SabreTools.Test/Filtering/CleaningTests.cs b/SabreTools.Test/Filtering/CleaningTests.cs index 174162e0..ebf0fae3 100644 --- a/SabreTools.Test/Filtering/CleaningTests.cs +++ b/SabreTools.Test/Filtering/CleaningTests.cs @@ -95,6 +95,26 @@ namespace SabreTools.Test.Filtering Assert.Equal("name-3", datItem.Machine.Description); } + [Fact] + public void SetOneRomPerGameTest() + { + // Setup cleaner + var cleaner = new Cleaner + { + OneRomPerGame = true, + }; + + // Setup DatItem + var datItem = CreateDatItem("name", "name-2", "name-3"); + + // Run cleaning + cleaner.SetOneRomPerGame(datItem); + + // Check the fields + Assert.Equal("name", datItem.GetName()); + Assert.Equal("name-2/name", datItem.Machine.Name); + } + /// /// Generate a consistent DatItem for testing /// diff --git a/SabreTools.Test/Filtering/FilteringTests.cs b/SabreTools.Test/Filtering/FilteringTests.cs index 6bf5e48a..e348348f 100644 --- a/SabreTools.Test/Filtering/FilteringTests.cs +++ b/SabreTools.Test/Filtering/FilteringTests.cs @@ -19,7 +19,7 @@ namespace SabreTools.Test.Filtering var datItem = CreateDatItem(); // Run filters - bool actual = filter.PassesFilters(datItem); + bool actual = filter.PassesAllFilters(datItem); Assert.True(actual); } @@ -34,7 +34,7 @@ namespace SabreTools.Test.Filtering var datItem = CreateDatItem(); // Run filters - bool actual = filter.PassesFilters(datItem); + bool actual = filter.PassesAllFilters(datItem); Assert.False(actual); } @@ -49,7 +49,7 @@ namespace SabreTools.Test.Filtering var datItem = CreateDatItem(); // Run filters - bool actual = filter.PassesFilters(datItem); + bool actual = filter.PassesAllFilters(datItem); Assert.True(actual); } @@ -64,7 +64,7 @@ namespace SabreTools.Test.Filtering var datItem = CreateDatItem(); // Run filters - bool actual = filter.PassesFilters(datItem); + bool actual = filter.PassesAllFilters(datItem); Assert.False(actual); }