diff --git a/SabreTools.DatItems/DatItem.cs b/SabreTools.DatItems/DatItem.cs
index cb9677e9..73be4a55 100644
--- a/SabreTools.DatItems/DatItem.cs
+++ b/SabreTools.DatItems/DatItem.cs
@@ -234,11 +234,11 @@ namespace SabreTools.DatItems
///
/// Return the duplicate status of two items
///
- /// Source associated with this item
+ /// Source associated with this item
/// DatItem to check against
/// Source associated with the last item
/// The DupeType corresponding to the relationship between the two
- public DupeType GetDuplicateStatus(Source? source, DatItem? lastItem, Source? lastSource)
+ public DupeType GetDuplicateStatusDB(Source? selfSource, DatItem? lastItem, Source? lastSource)
{
DupeType output = 0x00;
@@ -246,33 +246,36 @@ namespace SabreTools.DatItems
if (!Equals(lastItem))
return output;
- // If the duplicate is external already or should be, set it
+ // TODO: Fix this since machines are determined in a different way
+ // Get the machines for comparison
+ var selfMachine = GetFieldValue(DatItem.MachineKey);
+ string? selfMachineName = selfMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey);
+ var lastMachine = lastItem.GetFieldValue(DatItem.MachineKey);
+ string? lastMachineName = lastMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey);
+
+ // If the duplicate is external already
#if NET20 || NET35
- if ((lastItem.GetFieldValue(DatItem.DupeTypeKey) & DupeType.External) != 0
- || lastSource?.Index != source?.Index)
+ if ((lastItem.GetFieldValue(DatItem.DupeTypeKey) & DupeType.External) != 0)
#else
- if (lastItem.GetFieldValue(DatItem.DupeTypeKey).HasFlag(DupeType.External)
- || lastSource?.Index != source?.Index)
+ if (lastItem.GetFieldValue(DatItem.DupeTypeKey).HasFlag(DupeType.External))
#endif
- {
- var currentMachine = GetFieldValue(DatItem.MachineKey);
- var lastMachine = lastItem?.GetFieldValue(DatItem.MachineKey);
- if (lastMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) == currentMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName())
- output = DupeType.External | DupeType.All;
- else
- output = DupeType.External | DupeType.Hash;
- }
+ output |= DupeType.External;
+
+ // If the duplicate should be external
+ else if (lastSource?.Index != selfSource?.Index)
+ output |= DupeType.External;
// Otherwise, it's considered an internal dupe
else
- {
- var currentMachine = GetFieldValue(DatItem.MachineKey);
- var lastMachine = lastItem?.GetFieldValue(DatItem.MachineKey);
- if (lastMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) == currentMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName())
- output = DupeType.Internal | DupeType.All;
- else
- output = DupeType.Internal | DupeType.Hash;
- }
+ output |= DupeType.Internal;
+
+ // If the item and machine names match
+ if (lastMachineName == selfMachineName && lastItem.GetName() == GetName())
+ output = DupeType.Internal | DupeType.All;
+
+ // Otherwise, hash match is assumed
+ else
+ output = DupeType.Internal | DupeType.Hash;
return output;
}