diff --git a/SabreTools.Metadata.DatFiles.Test/ItemDatabaseTests.cs b/SabreTools.Metadata.DatFiles.Test/ItemDatabaseTests.cs index 08cea068..2999fc56 100644 --- a/SabreTools.Metadata.DatFiles.Test/ItemDatabaseTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/ItemDatabaseTests.cs @@ -519,7 +519,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.Equal(0, machineIndex); var actual = dict.GetMachine(machineIndex); - Assert.NotNull(actual); + Assert.NotNull(actual.Value); } #endregion diff --git a/SabreTools.Metadata.DatFiles/DatFile.Filtering.cs b/SabreTools.Metadata.DatFiles/DatFile.Filtering.cs index 44f71d0c..95ae6cf5 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.Filtering.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.Filtering.cs @@ -595,7 +595,7 @@ namespace SabreTools.Metadata.DatFiles // Clone current machine to avoid conflict long newMachineIndex = AddMachineDB((Machine)machine.Value.Clone()); - machine = new KeyValuePair(newMachineIndex, ItemsDB.GetMachine(newMachineIndex)); + machine = GetMachineDB(newMachineIndex); if (machine.Value is null) return; diff --git a/SabreTools.Metadata.DatFiles/DatFile.cs b/SabreTools.Metadata.DatFiles/DatFile.cs index e10fd35b..0b749ceb 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.cs @@ -265,6 +265,12 @@ namespace SabreTools.Metadata.DatFiles public Dictionary GetItemsForBucketDB(string? bucketName, bool filter = false) => ItemsDB.GetItemsForBucket(bucketName, filter); + /// + /// Get the index and machine associated with a machine index + /// + public KeyValuePair GetMachineDB(long machineIndex) + => ItemsDB.GetMachine(machineIndex); + /// /// Get all machines and their indicies /// @@ -277,6 +283,12 @@ namespace SabreTools.Metadata.DatFiles public KeyValuePair GetMachineForItemDB(long itemIndex) => ItemsDB.GetMachineForItem(itemIndex); + /// + /// Get the index and source associated with a source index + /// + public KeyValuePair GetSourceDB(long sourceIndex) + => ItemsDB.GetSource(sourceIndex); + /// /// Remove a key from the file dictionary if it exists /// @@ -881,9 +893,9 @@ namespace SabreTools.Metadata.DatFiles // If the current item exactly matches the last item, then we don't add it #if NET20 || NET35 - if ((ItemsDB.GetDuplicateStatus(datItem, datItemSource, lastItem, lastItemSource) & DupeType.All) != 0) + if ((ItemsDB.GetDuplicateStatus(datItem, datItemSource.Value, lastItem, lastItemSource.Value) & DupeType.All) != 0) #else - if (ItemsDB.GetDuplicateStatus(datItem, datItemSource, lastItem, lastItemSource).HasFlag(DupeType.All)) + if (ItemsDB.GetDuplicateStatus(datItem, datItemSource.Value, lastItem, lastItemSource.Value).HasFlag(DupeType.All)) #endif { _logger.Verbose($"Exact duplicate found for '{datItemName}'"); @@ -1196,8 +1208,8 @@ namespace SabreTools.Metadata.DatFiles // Compare on source if renaming if (!norename) { - int xSourceIndex = ItemsDB.GetSource(x.Value.SourceIndex)?.Index ?? 0; - int ySourceIndex = ItemsDB.GetSource(y.Value.SourceIndex)?.Index ?? 0; + int xSourceIndex = ItemsDB.GetSource(x.Value.SourceIndex).Value?.Index ?? 0; + int ySourceIndex = ItemsDB.GetSource(y.Value.SourceIndex).Value?.Index ?? 0; if (xSourceIndex != ySourceIndex) return xSourceIndex - ySourceIndex; } diff --git a/SabreTools.Metadata.DatFiles/ItemDatabase.cs b/SabreTools.Metadata.DatFiles/ItemDatabase.cs index 085b8a72..cf7f0aa7 100644 --- a/SabreTools.Metadata.DatFiles/ItemDatabase.cs +++ b/SabreTools.Metadata.DatFiles/ItemDatabase.cs @@ -361,12 +361,12 @@ namespace SabreTools.Metadata.DatFiles /// /// Get a machine based on the index /// - public Machine? GetMachine(long index) + public KeyValuePair GetMachine(long index) { if (!_machines.TryGetValue(index, out var machine)) - return null; + return new KeyValuePair(-1, null); - return machine; + return new KeyValuePair(index, machine); } /// @@ -405,12 +405,12 @@ namespace SabreTools.Metadata.DatFiles /// /// Get a source based on the index /// - public Source? GetSource(long index) + public KeyValuePair GetSource(long index) { - if (_sources.TryGetValue(index, out var source)) - return source; + if (!_sources.TryGetValue(index, out var source)) + return new KeyValuePair(-1, null); - return null; + return new KeyValuePair(index, source); } /// @@ -657,7 +657,7 @@ namespace SabreTools.Metadata.DatFiles _ = SortAndGetKey(datItem, sorted); var machine = GetMachineForItem(datItem.Key); var source = GetSource(datItem.Value.SourceIndex); - string key = datItem.Value.GetKey(_bucketedBy, machine.Value, source); + string key = datItem.Value.GetKey(_bucketedBy, machine.Value, source.Value); // If the key doesn't exist, return the empty list var items = GetItemsForBucket(key); @@ -700,7 +700,7 @@ namespace SabreTools.Metadata.DatFiles _ = SortAndGetKey(datItem, sorted); var machine = GetMachineForItem(datItem.Key); var source = GetSource(datItem.Value.SourceIndex); - string key = datItem.Value.GetKey(_bucketedBy, machine.Value, source); + string key = datItem.Value.GetKey(_bucketedBy, machine.Value, source.Value); // If the key doesn't exist var roms = GetItemsForBucket(key); @@ -761,7 +761,7 @@ namespace SabreTools.Metadata.DatFiles int pos = output.FindIndex(lastItem => { var lastItemSource = GetSource(lastItem.Value.SourceIndex); - return GetDuplicateStatus(kvp, datItemSource, lastItem, lastItemSource) != 0x00; + return GetDuplicateStatus(kvp, datItemSource.Value, lastItem, lastItemSource.Value) != 0x00; }); if (pos < 0) { @@ -773,7 +773,7 @@ namespace SabreTools.Metadata.DatFiles long savedIndex = output[pos].Key; DatItem savedItem = output[pos].Value; var savedItemSource = GetSource(savedItem.SourceIndex); - DupeType dupetype = GetDuplicateStatus(kvp, datItemSource, output[pos], savedItemSource); + DupeType dupetype = GetDuplicateStatus(kvp, datItemSource.Value, output[pos], savedItemSource.Value); // Disks, Media, and Roms have more information to fill if (datItem is Disk diskItem && savedItem is Disk savedDisk) @@ -796,7 +796,7 @@ namespace SabreTools.Metadata.DatFiles var itemMachine = GetMachineForItem(itemIndex); // If the current source has a lower ID than the saved, use the saved source - if (itemSource?.Index < savedSource?.Index) + if (itemSource.Value?.Index < savedSource.Value?.Index) { datItem.SourceIndex = savedItem.SourceIndex; _machines[savedMachine.Key] = (itemMachine.Value!.Clone() as Machine)!; @@ -897,7 +897,7 @@ namespace SabreTools.Metadata.DatFiles bucketBy = ItemKey.Machine; // Get the bucket key - return datItem.Value.GetKey(bucketBy, machine, source, lower, norename); + return datItem.Value.GetKey(bucketBy, machine.Value, source.Value, lower, norename); } /// @@ -1031,8 +1031,8 @@ namespace SabreTools.Metadata.DatFiles // Compare on source if renaming if (!norename) { - int xSourceIndex = GetSource(x.Value.SourceIndex)?.Index ?? 0; - int ySourceIndex = GetSource(y.Value.SourceIndex)?.Index ?? 0; + int xSourceIndex = GetSource(x.Value.SourceIndex).Value?.Index ?? 0; + int ySourceIndex = GetSource(y.Value.SourceIndex).Value?.Index ?? 0; if (xSourceIndex != ySourceIndex) return xSourceIndex - ySourceIndex; }