Remove public add-to-key functionality

This commit is contained in:
Matt Nadareski
2025-01-14 15:32:14 -05:00
parent f3e1a6a19a
commit de00d31319
15 changed files with 254 additions and 333 deletions

View File

@@ -152,7 +152,7 @@ namespace SabreTools.DatTools
/// <param name="datFile">Current DatFile object to run operations on</param>
internal void CleanDatItems(DatFile datFile)
{
List<string> keys = [.. datFile.Items.Keys];
List<string> keys = [.. datFile.Items.SortedKeys];
foreach (string key in keys)
{
// For every item in the current key

View File

@@ -230,7 +230,7 @@ namespace SabreTools.DatTools
{
// Add the list if it doesn't exist already
Rom rom = baseFile.ConvertToRom();
datFile.Add(rom.GetKey(ItemKey.CRC), rom);
datFile.AddItem(rom, statsOnly: false);
_staticLogger.Verbose($"File added: {Path.GetFileNameWithoutExtension(item)}");
}
else
@@ -387,7 +387,7 @@ namespace SabreTools.DatTools
blankRom.SetName(romname);
blankRom.SetFieldValue<Machine?>(DatItem.MachineKey, blankMachine);
datFile.Add("null", blankRom);
datFile.AddItem(blankRom, statsOnly: false);
#if NET40_OR_GREATER || NETCOREAPP
});
#else
@@ -440,8 +440,7 @@ namespace SabreTools.DatTools
SetDatItemInfo(datFile, datItem, item, parent, basepath);
// Add the file information to the DAT
string key = datItem.GetKey(ItemKey.CRC);
datFile.Add(key, datItem);
datFile.AddItem(datItem, statsOnly: false);
_staticLogger.Verbose($"File added: {datItem.GetName() ?? string.Empty}");
}

View File

@@ -166,7 +166,7 @@ namespace SabreTools.DatTools
if (itemDictionary == null || (MachineFieldNames.Count == 0 && ItemFieldNames.Count == 0))
return;
foreach (var key in itemDictionary.Keys)
foreach (var key in itemDictionary.SortedKeys)
{
List<DatItem>? items = itemDictionary.GetItemsForBucket(key);
if (items == null)

View File

@@ -2,8 +2,8 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
#if NET40_OR_GREATER || NETCOREAPP
using System.Net;
using System.Threading.Tasks;
#endif
using SabreTools.Core.Tools;
@@ -66,11 +66,11 @@ namespace SabreTools.DatTools
// Now separate the roms accordingly
#if NET452_OR_GREATER || NETCOREAPP
Parallel.ForEach(datFile.Items.Keys, Core.Globals.ParallelOptions, key =>
Parallel.ForEach(datFile.Items.SortedKeys, Core.Globals.ParallelOptions, key =>
#elif NET40_OR_GREATER
Parallel.ForEach(datFile.Items.Keys, key =>
Parallel.ForEach(datFile.Items.SortedKeys, key =>
#else
foreach (var key in datFile.Items.Keys)
foreach (var key in datFile.Items.SortedKeys)
#endif
{
var items = datFile.GetItemsForBucket(key);
@@ -85,16 +85,16 @@ namespace SabreTools.DatTools
{
if (Array.IndexOf(newExtA, (item.GetName() ?? string.Empty).GetNormalizedExtension()) > -1)
{
extADat.Add(key, item);
extADat.AddItem(item, statsOnly: false);
}
if (Array.IndexOf(newExtB, (item.GetName() ?? string.Empty).GetNormalizedExtension()) > -1)
{
extBDat.Add(key, item);
extBDat.AddItem(item, statsOnly: false);
}
else
{
extADat.Add(key, item);
extBDat.Add(key, item);
extADat.AddItem(item, statsOnly: false);
extBDat.AddItem(item, statsOnly: false);
}
}
#if NET40_OR_GREATER || NETCOREAPP
@@ -242,11 +242,11 @@ namespace SabreTools.DatTools
// Now populate each of the DAT objects in turn
#if NET452_OR_GREATER || NETCOREAPP
Parallel.ForEach(datFile.Items.Keys, Core.Globals.ParallelOptions, key =>
Parallel.ForEach(datFile.Items.SortedKeys, Core.Globals.ParallelOptions, key =>
#elif NET40_OR_GREATER
Parallel.ForEach(datFile.Items.Keys, key =>
Parallel.ForEach(datFile.Items.SortedKeys, key =>
#else
foreach (var key in datFile.Items.Keys)
foreach (var key in datFile.Items.SortedKeys)
#endif
{
var items = datFile.GetItemsForBucket(key);
@@ -263,49 +263,49 @@ namespace SabreTools.DatTools
{
case Disk disk:
if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue<ItemStatus>() == ItemStatus.Nodump)
fieldDats[Models.Metadata.Disk.StatusKey].Add(key, item);
fieldDats[Models.Metadata.Disk.StatusKey].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)))
fieldDats[Models.Metadata.Disk.SHA1Key].Add(key, item);
fieldDats[Models.Metadata.Disk.SHA1Key].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)))
fieldDats[Models.Metadata.Disk.MD5Key].Add(key, item);
fieldDats[Models.Metadata.Disk.MD5Key].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)))
fieldDats[Models.Metadata.Disk.MD5Key].Add(key, item);
fieldDats[Models.Metadata.Disk.MD5Key].AddItem(item, statsOnly: false);
else
fieldDats["null"].Add(key, item);
fieldDats["null"].AddItem(item, statsOnly: false);
break;
case Media media:
if (!string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA256Key)))
fieldDats[Models.Metadata.Media.SHA256Key].Add(key, item);
fieldDats[Models.Metadata.Media.SHA256Key].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)))
fieldDats[Models.Metadata.Media.SHA1Key].Add(key, item);
fieldDats[Models.Metadata.Media.SHA1Key].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)))
fieldDats[Models.Metadata.Media.MD5Key].Add(key, item);
fieldDats[Models.Metadata.Media.MD5Key].AddItem(item, statsOnly: false);
else
fieldDats["null"].Add(key, item);
fieldDats["null"].AddItem(item, statsOnly: false);
break;
case Rom rom:
if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue<ItemStatus>() == ItemStatus.Nodump)
fieldDats[Models.Metadata.Rom.StatusKey].Add(key, item);
fieldDats[Models.Metadata.Rom.StatusKey].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)))
fieldDats[Models.Metadata.Rom.SHA512Key].Add(key, item);
fieldDats[Models.Metadata.Rom.SHA512Key].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)))
fieldDats[Models.Metadata.Rom.SHA384Key].Add(key, item);
fieldDats[Models.Metadata.Rom.SHA384Key].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)))
fieldDats[Models.Metadata.Rom.SHA256Key].Add(key, item);
fieldDats[Models.Metadata.Rom.SHA256Key].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)))
fieldDats[Models.Metadata.Rom.SHA1Key].Add(key, item);
fieldDats[Models.Metadata.Rom.SHA1Key].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)))
fieldDats[Models.Metadata.Rom.MD5Key].Add(key, item);
fieldDats[Models.Metadata.Rom.MD5Key].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)))
fieldDats[Models.Metadata.Rom.MD4Key].Add(key, item);
fieldDats[Models.Metadata.Rom.MD4Key].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)))
fieldDats[Models.Metadata.Rom.MD2Key].Add(key, item);
fieldDats[Models.Metadata.Rom.MD2Key].AddItem(item, statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)))
fieldDats[Models.Metadata.Rom.CRCKey].Add(key, item);
fieldDats[Models.Metadata.Rom.CRCKey].AddItem(item, statsOnly: false);
else
fieldDats["null"].Add(key, item);
fieldDats["null"].AddItem(item, statsOnly: false);
break;
default:
@@ -500,7 +500,7 @@ namespace SabreTools.DatTools
tempDat.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, null);
// Sort the input keys
List<string> keys = [.. datFile.Items.Keys];
List<string> keys = [.. datFile.Items.SortedKeys];
keys.Sort(SplitByLevelSort);
// Then, we loop over the games
@@ -532,7 +532,7 @@ namespace SabreTools.DatTools
items.ForEach(item => item.GetFieldValue<Machine>(DatItem.MachineKey)!.SetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey, Path.GetFileName(item.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey))));
// Now add the game to the output DAT
tempDat.Add(key, items);
items.ForEach(item => tempDat.AddItem(item, statsOnly: false));
// Then set the DAT name to be the parent directory name
tempDat.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, Path.GetDirectoryName(key));
@@ -631,11 +631,11 @@ namespace SabreTools.DatTools
// Now populate each of the DAT objects in turn
#if NET452_OR_GREATER || NETCOREAPP
Parallel.ForEach(datFile.Items.Keys, Core.Globals.ParallelOptions, key =>
Parallel.ForEach(datFile.Items.SortedKeys, Core.Globals.ParallelOptions, key =>
#elif NET40_OR_GREATER
Parallel.ForEach(datFile.Items.Keys, key =>
Parallel.ForEach(datFile.Items.SortedKeys, key =>
#else
foreach (var key in datFile.Items.Keys)
foreach (var key in datFile.Items.SortedKeys)
#endif
{
List<DatItem>? items = datFile.GetItemsForBucket(key);
@@ -649,19 +649,19 @@ namespace SabreTools.DatTools
{
// If the file is not a Rom, it automatically goes in the "lesser" dat
if (item is not Rom rom)
lessThan.Add(key, item);
lessThan.AddItem(item, statsOnly: false);
// If the file is a Rom and has no size, put it in the "lesser" dat
else if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null)
lessThan.Add(key, item);
lessThan.AddItem(item, statsOnly: false);
// If the file is a Rom and less than the radix, put it in the "lesser" dat
else if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) < radix)
lessThan.Add(key, item);
lessThan.AddItem(item, statsOnly: false);
// If the file is a Rom and greater than or equal to the radix, put it in the "greater" dat
else if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) >= radix)
greaterThan.Add(key, item);
greaterThan.AddItem(item, statsOnly: false);
}
#if NET40_OR_GREATER || NETCOREAPP
});
@@ -838,7 +838,7 @@ namespace SabreTools.DatTools
}
// Add the current machine to the current DatFile
currentDat.Add(machine, items);
items.ForEach(item => currentDat.AddItem(item, statsOnly: false));
currentSize += machineSize;
}
@@ -913,11 +913,11 @@ namespace SabreTools.DatTools
{
// Loop through and add the items for this index to the output
#if NET452_OR_GREATER || NETCOREAPP
Parallel.ForEach(datFile.Items.Keys, Core.Globals.ParallelOptions, key =>
Parallel.ForEach(datFile.Items.SortedKeys, Core.Globals.ParallelOptions, key =>
#elif NET40_OR_GREATER
Parallel.ForEach(datFile.Items.Keys, key =>
Parallel.ForEach(datFile.Items.SortedKeys, key =>
#else
foreach (var key in datFile.Items.Keys)
foreach (var key in datFile.Items.SortedKeys)
#endif
{
List<DatItem> items = DatFileTool.Merge(datFile.GetItemsForBucket(key));
@@ -933,7 +933,7 @@ namespace SabreTools.DatTools
foreach (DatItem item in items)
{
if (item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>() == itemType)
indexDat.Add(key, item);
indexDat.AddItem(item, statsOnly: false);
}
#if NET40_OR_GREATER || NETCOREAPP
});

View File

@@ -83,17 +83,17 @@ namespace SabreTools.DatTools
{
DatStatistics individualStats = datdata.DatStatistics;
individualStats.DisplayName = datdata.Header.GetStringFieldValue(DatHeader.FileNameKey);
individualStats.MachineCount = datdata.Items.Keys.Count;
individualStats.MachineCount = datdata.Items.SortedKeys.Count;
stats.Add(individualStats);
}
// Add single DAT stats to dir
dirStats.AddStatistics(datdata.DatStatistics);
dirStats.GameCount += datdata.Items.Keys.Count;
dirStats.GameCount += datdata.Items.SortedKeys.Count;
// Add single DAT stats to totals
totalStats.AddStatistics(datdata.DatStatistics);
totalStats.GameCount += datdata.Items.Keys.Count;
totalStats.GameCount += datdata.Items.SortedKeys.Count;
// Make sure to assign the new directory
lastdir = thisdir;

View File

@@ -141,7 +141,7 @@ namespace SabreTools.DatTools
datFile.BucketBy(ItemKey.Machine, DedupeType.None, norename: true);
datFile.DatStatistics.DisplayName = datFile.Header.GetStringFieldValue(DatHeader.FileNameKey);
datFile.DatStatistics.MachineCount = datFile.Items.Keys.Count;
datFile.DatStatistics.MachineCount = datFile.Items.SortedKeys.Count;
List<DatStatistics> statsList =
[