Make GetDuplicateStatus easier to follow

This commit is contained in:
Matt Nadareski
2025-01-07 15:52:25 -05:00
parent 7b2b9f7799
commit f832b4c9a6

View File

@@ -194,33 +194,39 @@ namespace SabreTools.DatItems
if (!Equals(lastItem)) if (!Equals(lastItem))
return output; return output;
// If the duplicate is external already or should be, set it // Get the sources for comparison
var selfSource = GetFieldValue<Source?>(DatItem.SourceKey);
var lastSource = lastItem.GetFieldValue<Source?>(DatItem.SourceKey);
// Get the machines for comparison
var selfMachine = GetFieldValue<Machine>(DatItem.MachineKey);
string? selfMachineName = selfMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey);
var lastMachine = lastItem.GetFieldValue<Machine>(DatItem.MachineKey);
string? lastMachineName = lastMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey);
// If the duplicate is external already
#if NET20 || NET35 #if NET20 || NET35
if ((lastItem.GetFieldValue<DupeType>(DatItem.DupeTypeKey) & DupeType.External) != 0 if ((lastItem.GetFieldValue<DupeType>(DatItem.DupeTypeKey) & DupeType.External) != 0)
|| lastItem?.GetFieldValue<Source?>(DatItem.SourceKey)?.Index != GetFieldValue<Source?>(DatItem.SourceKey)?.Index)
#else #else
if (lastItem.GetFieldValue<DupeType>(DatItem.DupeTypeKey).HasFlag(DupeType.External) if (lastItem.GetFieldValue<DupeType>(DatItem.DupeTypeKey).HasFlag(DupeType.External))
|| lastItem?.GetFieldValue<Source?>(DatItem.SourceKey)?.Index != GetFieldValue<Source?>(DatItem.SourceKey)?.Index)
#endif #endif
{ output |= DupeType.External;
var currentMachine = GetFieldValue<Machine>(DatItem.MachineKey);
var lastMachine = lastItem?.GetFieldValue<Machine>(DatItem.MachineKey); // If the duplicate should be external
if (lastMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) == currentMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) else if (lastSource?.Index != selfSource?.Index)
output = DupeType.External | DupeType.All; output |= DupeType.External;
else
output = DupeType.External | DupeType.Hash;
}
// Otherwise, it's considered an internal dupe // Otherwise, it's considered an internal dupe
else else
{ output |= DupeType.Internal;
var currentMachine = GetFieldValue<Machine>(DatItem.MachineKey);
var lastMachine = lastItem?.GetFieldValue<Machine>(DatItem.MachineKey); // If the item and machine names match
if (lastMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) == currentMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) if (lastMachineName == selfMachineName && lastItem.GetName() == GetName())
output = DupeType.Internal | DupeType.All; output = DupeType.Internal | DupeType.All;
else
output = DupeType.Internal | DupeType.Hash; // Otherwise, hash match is assumed
} else
output = DupeType.Internal | DupeType.Hash;
return output; return output;
} }