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; } } }