diff --git a/SabreTools.DatFiles/ItemDictionaryDB.cs b/SabreTools.DatFiles/ItemDictionaryDB.cs index e98b5443..dc507ae6 100644 --- a/SabreTools.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.DatFiles/ItemDictionaryDB.cs @@ -850,19 +850,14 @@ namespace SabreTools.DatFiles if (datItem == null) return string.Empty; - if (!_itemToMachineMapping.ContainsKey(itemIndex)) + var machine = GetMachineForItem(itemIndex); + if (machine.Item2 == null) return string.Empty; - long machineIndex = _itemToMachineMapping[itemIndex]; - if (!_machines.ContainsKey(machineIndex)) - return string.Empty; + var source = GetSourceForItem(itemIndex); - var machine = _machines[machineIndex]; - if (machine == null) - return string.Empty; - - string sourceKeyPadded = datItem.GetFieldValue(DatItem.SourceKey)?.Index.ToString().PadLeft(10, '0') + '-'; - string machineName = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? "Default"; + string sourceKeyPadded = source.Item2?.Index.ToString().PadLeft(10, '0') + '-'; + string machineName = machine.Item2.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? "Default"; string bucketKey = bucketBy switch { @@ -1116,8 +1111,8 @@ namespace SabreTools.DatFiles return nc.Compare(xName, yName); // Otherwise, compare on machine or source, depending on the flag - int? xSourceIndex = x.Item2.GetFieldValue(DatItem.SourceKey)?.Index; - int? ySourceIndex = y.Item2.GetFieldValue(DatItem.SourceKey)?.Index; + int? xSourceIndex = GetSourceForItem(x.Item1).Item2?.Index; + int? ySourceIndex = GetSourceForItem(y.Item1).Item2?.Index; return (norename ? nc.Compare(xMachineName, yMachineName) : (xSourceIndex - ySourceIndex) ?? 0); } catch diff --git a/SabreTools.DatTools/DatFileTool.cs b/SabreTools.DatTools/DatFileTool.cs index 119ac97b..96ceeea5 100644 --- a/SabreTools.DatTools/DatFileTool.cs +++ b/SabreTools.DatTools/DatFileTool.cs @@ -118,15 +118,16 @@ namespace SabreTools.DatTools foreach ((long, DatItem) item in items) { - if (item.Item2.GetFieldValue(DatItem.SourceKey) == null) + var source = datFile.ItemsDB.GetSourceForItem(item.Item1); + if (source.Item2 == null) continue; var machine = datFile.ItemsDB.GetMachineForItem(item.Item1); if (machine.Item2 == null) continue; - string filename = inputs[item.Item2.GetFieldValue(DatItem.SourceKey)!.Index].CurrentPath; - string? rootpath = inputs[item.Item2.GetFieldValue(DatItem.SourceKey)!.Index].ParentPath; + string filename = inputs[source.Item2.Index].CurrentPath; + string? rootpath = inputs[source.Item2.Index].ParentPath; if (!string.IsNullOrEmpty(rootpath) #if NETFRAMEWORK @@ -913,7 +914,9 @@ namespace SabreTools.DatTools long machineIndex = itemMachineMappings[item.Key]; long sourceIndex = itemSourceMappings[item.Key]; - if (item.Value.GetFieldValue(DatItem.SourceKey) == null) + // Get the source associated with the item + var source = datFile.ItemsDB.GetSource(sourceIndex); + if (source == null) #if NET40_OR_GREATER || NETCOREAPP return; #else @@ -925,7 +928,7 @@ namespace SabreTools.DatTools #else if (item.Value.GetFieldValue(DatItem.DupeTypeKey).HasFlag(DupeType.Internal) || item.Value.GetFieldValue(DatItem.DupeTypeKey) == 0x00) #endif - outDats[item.Value.GetFieldValue(DatItem.SourceKey)!.Index].ItemsDB.AddItem(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); + outDats[source.Index].ItemsDB.AddItem(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); #if NET40_OR_GREATER || NETCOREAPP }); #else @@ -1105,14 +1108,13 @@ namespace SabreTools.DatTools if (item.Value.GetFieldValue(DatItem.DupeTypeKey).HasFlag(DupeType.Internal) || item.Value.GetFieldValue(DatItem.DupeTypeKey) == 0x00) #endif { - if (item.Value.Clone() is not DatItem newrom || newrom.GetFieldValue(DatItem.SourceKey) == null) + if (item.Value.Clone() is not DatItem newrom || sourceIndex == -1) #if NET40_OR_GREATER || NETCOREAPP return; #else continue; #endif - newrom.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, newrom.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) + $" ({Path.GetFileNameWithoutExtension(inputs[newrom.GetFieldValue(DatItem.SourceKey)!.Index].CurrentPath)})"); outerDiffData.ItemsDB.AddItem(newrom, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); } #if NET40_OR_GREATER || NETCOREAPP @@ -1357,7 +1359,10 @@ namespace SabreTools.DatTools long machineIndex = itemMachineMappings[item.Key]; long sourceIndex = itemSourceMappings[item.Key]; - if (item.Value.GetFieldValue(DatItem.SourceKey) != null && item.Value.GetFieldValue(DatItem.SourceKey)!.Index == index) + // Get the source associated with the item + var source = datFile.ItemsDB.GetSource(sourceIndex); + + if (source != null && source.Index == index) indexDat.ItemsDB.AddItem(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); #if NET40_OR_GREATER || NETCOREAPP }); diff --git a/SabreTools.DatTools/Verification.cs b/SabreTools.DatTools/Verification.cs index ba3a9d65..f8caff94 100644 --- a/SabreTools.DatTools/Verification.cs +++ b/SabreTools.DatTools/Verification.cs @@ -274,8 +274,11 @@ namespace SabreTools.DatTools for (int i = 0; i < items.Length; i++) { + // Get the source associated with the item + var source = datFile.ItemsDB.GetSourceForItem(items[i].Item1); + // Unmatched items will have a source ID of int.MaxValue, remove all others - if (items[i].Item2.GetFieldValue(DatItem.SourceKey)?.Index != int.MaxValue) + if (source.Item2?.Index != int.MaxValue) items[i].Item2.SetFieldValue(DatItem.RemoveKey, true); } }