mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Move field replacement
This commit is contained in:
@@ -315,291 +315,9 @@ namespace SabreTools.Library.DatFiles
|
|||||||
List<DatItem> dupes = Items.GetDuplicates(datItem, sorted: true);
|
List<DatItem> dupes = Items.GetDuplicates(datItem, sorted: true);
|
||||||
DatItem newDatItem = datItem.Clone() as DatItem;
|
DatItem newDatItem = datItem.Clone() as DatItem;
|
||||||
|
|
||||||
// Cast versions of the new DatItem for use below
|
// Replace fields from the first duplicate, if we have one
|
||||||
var archive = newDatItem as Archive;
|
|
||||||
var biosSet = newDatItem as BiosSet;
|
|
||||||
var blank = newDatItem as Blank;
|
|
||||||
var disk = newDatItem as Disk;
|
|
||||||
var release = newDatItem as Release;
|
|
||||||
var rom = newDatItem as Rom;
|
|
||||||
var sample = newDatItem as Sample;
|
|
||||||
|
|
||||||
if (dupes.Count > 0)
|
if (dupes.Count > 0)
|
||||||
{
|
newDatItem.ReplaceFields(dupes.First(), updateFields);
|
||||||
// Get the first duplicate for grabbing information from
|
|
||||||
var firstDupe = dupes.First();
|
|
||||||
var archiveDupe = firstDupe as Archive;
|
|
||||||
var biosSetDupe = firstDupe as BiosSet;
|
|
||||||
var blankDupe = firstDupe as Blank;
|
|
||||||
var diskDupe = firstDupe as Disk;
|
|
||||||
var releaseDupe = firstDupe as Release;
|
|
||||||
var romDupe = firstDupe as Rom;
|
|
||||||
var sampleDupe = firstDupe as Sample;
|
|
||||||
|
|
||||||
#region Non-hash fields
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Name))
|
|
||||||
newDatItem.Name = firstDupe.Name;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.PartName))
|
|
||||||
newDatItem.PartName = firstDupe.PartName;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.PartInterface))
|
|
||||||
newDatItem.PartInterface = firstDupe.PartInterface;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Features))
|
|
||||||
newDatItem.Features = firstDupe.Features;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.AreaName))
|
|
||||||
newDatItem.AreaName = firstDupe.AreaName;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.AreaSize))
|
|
||||||
newDatItem.AreaSize = firstDupe.AreaSize;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.BiosDescription))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.BiosSet)
|
|
||||||
biosSet.Description = biosSetDupe.Description;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Default))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.BiosSet)
|
|
||||||
biosSet.Default = biosSetDupe.Default;
|
|
||||||
|
|
||||||
else if (newDatItem.ItemType == ItemType.Release)
|
|
||||||
release.Default = releaseDupe.Default;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Language))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Release)
|
|
||||||
release.Language = releaseDupe.Language;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Date))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Release)
|
|
||||||
release.Date = releaseDupe.Date;
|
|
||||||
|
|
||||||
else if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
rom.Date = romDupe.Date;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Bios))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
rom.Bios = romDupe.Bios;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Size))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
rom.Size = romDupe.Size;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Offset))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
rom.Offset = romDupe.Offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Merge))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
disk.MergeTag = diskDupe.MergeTag;
|
|
||||||
|
|
||||||
else if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
rom.MergeTag = romDupe.MergeTag;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Region))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
disk.Region = diskDupe.Region;
|
|
||||||
|
|
||||||
else if (newDatItem.ItemType == ItemType.Release)
|
|
||||||
release.Region = releaseDupe.Region;
|
|
||||||
|
|
||||||
else if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
rom.Region = romDupe.Region;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Index))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
disk.Index = diskDupe.Index;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Writable))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
disk.Writable = diskDupe.Writable;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Optional))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
disk.Optional = diskDupe.Optional;
|
|
||||||
|
|
||||||
else if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
rom.Optional = romDupe.Optional;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Status))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
disk.ItemStatus = diskDupe.ItemStatus;
|
|
||||||
|
|
||||||
else if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
rom.ItemStatus = romDupe.ItemStatus;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Inverted))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
rom.Inverted = romDupe.Inverted;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Hash fields
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.CRC))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(rom.CRC) && !string.IsNullOrEmpty(romDupe.CRC))
|
|
||||||
rom.CRC = romDupe.CRC;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.MD5))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(disk.MD5) && !string.IsNullOrEmpty(diskDupe.MD5))
|
|
||||||
disk.MD5 = diskDupe.MD5;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(rom.MD5) && !string.IsNullOrEmpty(romDupe.MD5))
|
|
||||||
rom.MD5 = romDupe.MD5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if NET_FRAMEWORK
|
|
||||||
if (updateFields.Contains(Field.RIPEMD160))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(disk.RIPEMD160) && !string.IsNullOrEmpty(diskDupe.RIPEMD160))
|
|
||||||
disk.RIPEMD160 = diskDupe.RIPEMD160;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(rom.RIPEMD160) && !string.IsNullOrEmpty(romDupe.RIPEMD160))
|
|
||||||
rom.RIPEMD160 = romDupe.RIPEMD160;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.SHA1))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(disk.SHA1) && !string.IsNullOrEmpty(diskDupe.SHA1))
|
|
||||||
disk.SHA1 = diskDupe.SHA1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(rom.SHA1) && !string.IsNullOrEmpty(romDupe.SHA1))
|
|
||||||
rom.SHA1 = romDupe.SHA1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.SHA256))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(disk.SHA256) && !string.IsNullOrEmpty(diskDupe.SHA256))
|
|
||||||
disk.SHA256 = diskDupe.SHA256;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(rom.SHA256) && !string.IsNullOrEmpty(romDupe.SHA256))
|
|
||||||
rom.SHA256 = romDupe.SHA256;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.SHA384))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(disk.SHA384) && !string.IsNullOrEmpty(diskDupe.SHA384))
|
|
||||||
disk.SHA384 = diskDupe.SHA384;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(rom.SHA384) && !string.IsNullOrEmpty(romDupe.SHA384))
|
|
||||||
rom.SHA384 = romDupe.SHA384;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.SHA512))
|
|
||||||
{
|
|
||||||
if (newDatItem.ItemType == ItemType.Disk)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(disk.SHA512) && !string.IsNullOrEmpty(diskDupe.SHA512))
|
|
||||||
disk.SHA512 = diskDupe.SHA512;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newDatItem.ItemType == ItemType.Rom)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(rom.SHA512) && !string.IsNullOrEmpty(romDupe.SHA512))
|
|
||||||
rom.SHA512 = romDupe.SHA512;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
// Now assign back the duplicate archive to the original
|
|
||||||
switch (newDatItem.ItemType)
|
|
||||||
{
|
|
||||||
case ItemType.Archive:
|
|
||||||
newDatItem = archive.Clone() as Archive;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ItemType.BiosSet:
|
|
||||||
newDatItem = biosSet.Clone() as BiosSet;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ItemType.Blank:
|
|
||||||
newDatItem = blank.Clone() as Blank;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ItemType.Disk:
|
|
||||||
newDatItem = disk.Clone() as Disk;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ItemType.Release:
|
|
||||||
newDatItem = release.Clone() as Release;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ItemType.Rom:
|
|
||||||
newDatItem = rom.Clone() as Rom;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ItemType.Sample:
|
|
||||||
newDatItem = sample.Clone() as Sample;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
newDatItems.Add(newDatItem);
|
newDatItems.Add(newDatItem);
|
||||||
}
|
}
|
||||||
@@ -626,69 +344,7 @@ namespace SabreTools.Library.DatFiles
|
|||||||
{
|
{
|
||||||
DatItem newDatItem = datItem.Clone() as DatItem;
|
DatItem newDatItem = datItem.Clone() as DatItem;
|
||||||
if (Items.ContainsKey(key) && Items[key].Count() > 0)
|
if (Items.ContainsKey(key) && Items[key].Count() > 0)
|
||||||
{
|
newDatItem.ReplaceMachineFields(Items[key][0], updateFields, onlySame);
|
||||||
var firstDupe = Items[key][0];
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.MachineName))
|
|
||||||
newDatItem.MachineName = firstDupe.MachineName;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Comment))
|
|
||||||
newDatItem.Comment = firstDupe.Comment;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Description))
|
|
||||||
{
|
|
||||||
if (!onlySame || (onlySame && newDatItem.MachineName == newDatItem.MachineDescription))
|
|
||||||
newDatItem.MachineDescription = firstDupe.MachineDescription;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Year))
|
|
||||||
newDatItem.Year = firstDupe.Year;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Manufacturer))
|
|
||||||
newDatItem.Manufacturer = firstDupe.Manufacturer;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Publisher))
|
|
||||||
newDatItem.Publisher = firstDupe.Publisher;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Category))
|
|
||||||
newDatItem.Category = firstDupe.Category;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.RomOf))
|
|
||||||
newDatItem.RomOf = firstDupe.RomOf;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.CloneOf))
|
|
||||||
newDatItem.CloneOf = firstDupe.CloneOf;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.SampleOf))
|
|
||||||
newDatItem.SampleOf = firstDupe.SampleOf;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Supported))
|
|
||||||
newDatItem.Supported = firstDupe.Supported;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.SourceFile))
|
|
||||||
newDatItem.SourceFile = firstDupe.SourceFile;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Runnable))
|
|
||||||
newDatItem.Runnable = firstDupe.Runnable;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Board))
|
|
||||||
newDatItem.Board = firstDupe.Board;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.RebuildTo))
|
|
||||||
newDatItem.RebuildTo = firstDupe.RebuildTo;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Devices))
|
|
||||||
newDatItem.Devices = firstDupe.Devices;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.SlotOptions))
|
|
||||||
newDatItem.SlotOptions = firstDupe.SlotOptions;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.Infos))
|
|
||||||
newDatItem.Infos = firstDupe.Infos;
|
|
||||||
|
|
||||||
if (updateFields.Contains(Field.MachineType))
|
|
||||||
newDatItem.MachineType = firstDupe.MachineType;
|
|
||||||
}
|
|
||||||
|
|
||||||
newDatItems.Add(newDatItem);
|
newDatItems.Add(newDatItem);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Security.Permissions;
|
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace SabreTools.Library.DatItems
|
namespace SabreTools.Library.DatItems
|
||||||
@@ -135,5 +134,34 @@ namespace SabreTools.Library.DatItems
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Sorting and Merging
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Replace fields from another item
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">DatItem to pull new information from</param>
|
||||||
|
/// <param name="updateFields">List of Fields representing what should be updated</param>
|
||||||
|
public override void ReplaceFields(DatItem item, List<Field> updateFields)
|
||||||
|
{
|
||||||
|
// Replace common fields first
|
||||||
|
base.ReplaceFields(item, updateFields);
|
||||||
|
|
||||||
|
// If we don't have a BiosSet to replace from, ignore specific fields
|
||||||
|
if (item.ItemType != ItemType.BiosSet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Cast for easier access
|
||||||
|
BiosSet newItem = item as BiosSet;
|
||||||
|
|
||||||
|
// Replace the fields
|
||||||
|
if (updateFields.Contains(Field.BiosDescription))
|
||||||
|
Description = newItem.Description;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Default))
|
||||||
|
Default = newItem.Default;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -958,6 +958,101 @@ namespace SabreTools.Library.DatItems
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Replace fields from another item
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">DatItem to pull new information from</param>
|
||||||
|
/// <param name="updateFields">List of Fields representing what should be updated</param>
|
||||||
|
public virtual void ReplaceFields(DatItem item, List<Field> updateFields)
|
||||||
|
{
|
||||||
|
if (updateFields.Contains(Field.Name))
|
||||||
|
Name = item.Name;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.PartName))
|
||||||
|
PartName = item.PartName;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.PartInterface))
|
||||||
|
PartInterface = item.PartInterface;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Features))
|
||||||
|
Features = item.Features;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.AreaName))
|
||||||
|
AreaName = item.AreaName;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.AreaSize))
|
||||||
|
AreaSize = item.AreaSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Replace machine fields from another item
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">DatItem to pull new information from</param>
|
||||||
|
/// <param name="updateFields">List of Fields representing what should be updated</param>
|
||||||
|
/// <param name="onlySame">True if descriptions should only be replaced if the game name is the same, false otherwise</param>
|
||||||
|
public void ReplaceMachineFields(DatItem item, List<Field> updateFields, bool onlySame)
|
||||||
|
{
|
||||||
|
if (updateFields.Contains(Field.MachineName))
|
||||||
|
MachineName = item.MachineName;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Comment))
|
||||||
|
Comment = item.Comment;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Description))
|
||||||
|
{
|
||||||
|
if (!onlySame || (onlySame && MachineName == MachineDescription))
|
||||||
|
MachineDescription = item.MachineDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Year))
|
||||||
|
Year = item.Year;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Manufacturer))
|
||||||
|
Manufacturer = item.Manufacturer;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Publisher))
|
||||||
|
Publisher = item.Publisher;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Category))
|
||||||
|
Category = item.Category;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.RomOf))
|
||||||
|
RomOf = item.RomOf;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.CloneOf))
|
||||||
|
CloneOf = item.CloneOf;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.SampleOf))
|
||||||
|
SampleOf = item.SampleOf;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Supported))
|
||||||
|
Supported = item.Supported;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.SourceFile))
|
||||||
|
SourceFile = item.SourceFile;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Runnable))
|
||||||
|
Runnable = item.Runnable;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Board))
|
||||||
|
Board = item.Board;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.RebuildTo))
|
||||||
|
RebuildTo = item.RebuildTo;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Devices))
|
||||||
|
Devices = item.Devices;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.SlotOptions))
|
||||||
|
SlotOptions = item.SlotOptions;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Infos))
|
||||||
|
Infos = item.Infos;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.MachineType))
|
||||||
|
MachineType = item.MachineType;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#endregion // Instance Methods
|
#endregion // Instance Methods
|
||||||
|
|||||||
@@ -536,6 +536,81 @@ namespace SabreTools.Library.DatItems
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Replace fields from another item
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">DatItem to pull new information from</param>
|
||||||
|
/// <param name="updateFields">List of Fields representing what should be updated</param>
|
||||||
|
public override void ReplaceFields(DatItem item, List<Field> updateFields)
|
||||||
|
{
|
||||||
|
// Replace common fields first
|
||||||
|
base.ReplaceFields(item, updateFields);
|
||||||
|
|
||||||
|
// If we don't have a Disk to replace from, ignore specific fields
|
||||||
|
if (item.ItemType != ItemType.Disk)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Cast for easier access
|
||||||
|
Disk newItem = item as Disk;
|
||||||
|
|
||||||
|
// Replace the fields
|
||||||
|
if (updateFields.Contains(Field.MD5))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(MD5) && !string.IsNullOrEmpty(newItem.MD5))
|
||||||
|
MD5 = newItem.MD5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if NET_FRAMEWORK
|
||||||
|
if (updateFields.Contains(Field.RIPEMD160))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(RIPEMD160) && !string.IsNullOrEmpty(newItem.RIPEMD160))
|
||||||
|
RIPEMD160 = newItem.RIPEMD160;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.SHA1))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
|
||||||
|
SHA1 = newItem.SHA1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.SHA256))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
|
||||||
|
SHA256 = newItem.SHA256;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.SHA384))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(SHA384) && !string.IsNullOrEmpty(newItem.SHA384))
|
||||||
|
SHA384 = newItem.SHA384;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.SHA512))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(SHA512) && !string.IsNullOrEmpty(newItem.SHA512))
|
||||||
|
SHA512 = newItem.SHA512;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Merge))
|
||||||
|
MergeTag = newItem.MergeTag;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Region))
|
||||||
|
Region = newItem.Region;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Index))
|
||||||
|
Index = newItem.Index;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Writable))
|
||||||
|
Writable = newItem.Writable;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Status))
|
||||||
|
ItemStatus = newItem.ItemStatus;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Optional))
|
||||||
|
Optional = newItem.Optional;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,5 +162,40 @@ namespace SabreTools.Library.DatItems
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Sorting and Merging
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Replace fields from another item
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">DatItem to pull new information from</param>
|
||||||
|
/// <param name="updateFields">List of Fields representing what should be updated</param>
|
||||||
|
public override void ReplaceFields(DatItem item, List<Field> updateFields)
|
||||||
|
{
|
||||||
|
// Replace common fields first
|
||||||
|
base.ReplaceFields(item, updateFields);
|
||||||
|
|
||||||
|
// If we don't have a Release to replace from, ignore specific fields
|
||||||
|
if (item.ItemType != ItemType.Release)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Cast for easier access
|
||||||
|
Release newItem = item as Release;
|
||||||
|
|
||||||
|
// Replace the fields
|
||||||
|
if (updateFields.Contains(Field.Region))
|
||||||
|
Region = newItem.Region;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Language))
|
||||||
|
Language = newItem.Language;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Date))
|
||||||
|
Date = newItem.Date;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Default))
|
||||||
|
Default = newItem.Default;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -565,6 +565,96 @@ namespace SabreTools.Library.DatItems
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Replace fields from another item
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">DatItem to pull new information from</param>
|
||||||
|
/// <param name="updateFields">List of Fields representing what should be updated</param>
|
||||||
|
public override void ReplaceFields(DatItem item, List<Field> updateFields)
|
||||||
|
{
|
||||||
|
// Replace common fields first
|
||||||
|
base.ReplaceFields(item, updateFields);
|
||||||
|
|
||||||
|
// If we don't have a Rom to replace from, ignore specific fields
|
||||||
|
if (item.ItemType != ItemType.Rom)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Cast for easier access
|
||||||
|
Rom newItem = item as Rom;
|
||||||
|
|
||||||
|
// Replace the fields
|
||||||
|
if (updateFields.Contains(Field.Bios))
|
||||||
|
Bios = newItem.Bios;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Size))
|
||||||
|
Size = newItem.Size;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.CRC))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(CRC) && !string.IsNullOrEmpty(newItem.CRC))
|
||||||
|
CRC = newItem.CRC;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.MD5))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(MD5) && !string.IsNullOrEmpty(newItem.MD5))
|
||||||
|
MD5 = newItem.MD5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if NET_FRAMEWORK
|
||||||
|
if (updateFields.Contains(Field.RIPEMD160))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(RIPEMD160) && !string.IsNullOrEmpty(newItem.RIPEMD160))
|
||||||
|
RIPEMD160 = newItem.RIPEMD160;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.SHA1))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
|
||||||
|
SHA1 = newItem.SHA1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.SHA256))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
|
||||||
|
SHA256 = newItem.SHA256;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.SHA384))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(SHA384) && !string.IsNullOrEmpty(newItem.SHA384))
|
||||||
|
SHA384 = newItem.SHA384;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.SHA512))
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(SHA512) && !string.IsNullOrEmpty(newItem.SHA512))
|
||||||
|
SHA512 = newItem.SHA512;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Merge))
|
||||||
|
MergeTag = newItem.MergeTag;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Region))
|
||||||
|
Region = newItem.Region;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Offset))
|
||||||
|
Offset = newItem.Offset;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Date))
|
||||||
|
Date = newItem.Date;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Status))
|
||||||
|
ItemStatus = newItem.ItemStatus;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Optional))
|
||||||
|
Optional = newItem.Optional;
|
||||||
|
|
||||||
|
if (updateFields.Contains(Field.Inverted))
|
||||||
|
Inverted = newItem.Inverted;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user