diff --git a/SabreTools.DatItems/DatItem.cs b/SabreTools.DatItems/DatItem.cs
index a5a86035..30830bb1 100644
--- a/SabreTools.DatItems/DatItem.cs
+++ b/SabreTools.DatItems/DatItem.cs
@@ -170,11 +170,8 @@ namespace SabreTools.DatItems
/// Existing item to copy information from
public void CopyMachineInformation(DatItem item)
{
- if (item?.GetFieldValue(DatItem.MachineKey) == null)
- return;
-
- if (item!.GetFieldValue(DatItem.MachineKey)!.Clone() is Machine cloned)
- SetFieldValue(DatItem.MachineKey, cloned);
+ var machine = item.GetFieldValue(DatItem.MachineKey);
+ CopyMachineInformation(machine);
}
///
@@ -383,17 +380,27 @@ namespace SabreTools.DatItems
break;
case ItemKey.Machine:
- key = (norename ? string.Empty
- : GetFieldValue(DatItem.SourceKey)?.Index.ToString().PadLeft(10, '0')
- + "-")
- + (string.IsNullOrEmpty(GetFieldValue(DatItem.MachineKey)?.GetStringFieldValue(Models.Metadata.Machine.NameKey))
- ? "Default"
- : GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!);
+ string sourceString = string.Empty;
+ if (!norename)
+ {
+ var source = GetFieldValue(DatItem.SourceKey);
+ if (source != null)
+ sourceString = source.Index.ToString().PadLeft(10, '0') + "-";
+ }
+
+ string machineString = "Default";
+ var machine = GetFieldValue(DatItem.MachineKey);
+ if (machine != null)
+ {
+ var machineName = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey);
+ if (!string.IsNullOrEmpty(machineName))
+ machineString = machineName!;
+ }
+
+ key = $"{sourceString}{machineString}";
if (lower)
key = key.ToLowerInvariant();
- key ??= "null";
-
break;
case ItemKey.MD5:
@@ -448,17 +455,23 @@ namespace SabreTools.DatItems
break;
case ItemKey.Machine:
- key = (norename ? string.Empty
- : source?.Index.ToString().PadLeft(10, '0')
- + "-")
- + (string.IsNullOrEmpty(GetFieldValue(DatItem.MachineKey)?.GetStringFieldValue(Models.Metadata.Machine.NameKey))
- ? "Default"
- : GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!);
+ string sourceString = string.Empty;
+ if (!norename && source != null)
+ sourceString = source.Index.ToString().PadLeft(10, '0') + "-";
+
+ string machineString = "Default";
+ var machine = GetFieldValue(DatItem.MachineKey);
+ if (machine != null)
+ {
+ var machineName = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey);
+ if (!string.IsNullOrEmpty(machineName))
+ machineString = machineName!;
+ }
+
+ key = $"{sourceString}{machineString}";
if (lower)
key = key.ToLowerInvariant();
- key ??= "null";
-
break;
case ItemKey.MD5:
@@ -526,9 +539,7 @@ namespace SabreTools.DatItems
// If we don't have a Disk, File, Media, or Rom, we skip checking for duplicates
if (item is not Disk && item is not Formats.File && item is not Media && item is not Rom)
- {
continue;
- }
// If it's a nodump, add and skip
if (item is Rom rom && rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump)
@@ -646,10 +657,14 @@ namespace SabreTools.DatItems
}
// Get the last item name, if applicable
- string lastItemName = lastItem.GetName() ?? lastItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue() ?? string.Empty;
+ string lastItemName = lastItem.GetName()
+ ?? lastItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue()
+ ?? string.Empty;
// Get the current item name, if applicable
- string datItemName = datItem.GetName() ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue() ?? string.Empty;
+ string datItemName = datItem.GetName()
+ ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue()
+ ?? string.Empty;
// If the current item exactly matches the last item, then we don't add it
#if NETFRAMEWORK