diff --git a/SabreTools.DatItems/DatItem.cs b/SabreTools.DatItems/DatItem.cs index d1dee63d..cb9677e9 100644 --- a/SabreTools.DatItems/DatItem.cs +++ b/SabreTools.DatItems/DatItem.cs @@ -194,33 +194,39 @@ namespace SabreTools.DatItems if (!Equals(lastItem)) return output; - // If the duplicate is external already or should be, set it + // Get the sources for comparison + var selfSource = GetFieldValue(DatItem.SourceKey); + var lastSource = lastItem.GetFieldValue(DatItem.SourceKey); + + // 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 - || lastItem?.GetFieldValue(DatItem.SourceKey)?.Index != GetFieldValue(DatItem.SourceKey)?.Index) + if ((lastItem.GetFieldValue(DatItem.DupeTypeKey) & DupeType.External) != 0) #else - if (lastItem.GetFieldValue(DatItem.DupeTypeKey).HasFlag(DupeType.External) - || lastItem?.GetFieldValue(DatItem.SourceKey)?.Index != GetFieldValue(DatItem.SourceKey)?.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; }