From f93d254a6412eafd7cbeaddcc4df1046697e83c8 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sun, 5 Apr 2026 11:00:36 -0400 Subject: [PATCH] Try to make DAT statistics less intense --- SabreTools.Metadata.DatFiles/DatStatistics.cs | 396 ++++++++---------- 1 file changed, 177 insertions(+), 219 deletions(-) diff --git a/SabreTools.Metadata.DatFiles/DatStatistics.cs b/SabreTools.Metadata.DatFiles/DatStatistics.cs index 850d870e..19b0f6af 100644 --- a/SabreTools.Metadata.DatFiles/DatStatistics.cs +++ b/SabreTools.Metadata.DatFiles/DatStatistics.cs @@ -121,7 +121,7 @@ namespace SabreTools.Metadata.DatFiles RemovedCount++; // Increment the item count for the type - AddItemCount(item.ItemType); + ModifyItemCount(item.ItemType, 1); // Some item types require special processing switch (item) @@ -155,7 +155,7 @@ namespace SabreTools.Metadata.DatFiles // Loop through and add stats for all items foreach (var itemCountKvp in stats._itemCounts) { - AddItemCount(itemCountKvp.Key, itemCountKvp.Value); + ModifyItemCount(itemCountKvp.Key, itemCountKvp.Value); } GameCount += stats.GameCount; @@ -165,13 +165,13 @@ namespace SabreTools.Metadata.DatFiles // Individual hash counts foreach (var hashCountKvp in stats._hashCounts) { - AddHashCount(hashCountKvp.Key, hashCountKvp.Value); + ModifyHashCount(hashCountKvp.Key, hashCountKvp.Value); } // Individual status counts foreach (var statusCountKvp in stats._statusCounts) { - AddStatusCount(statusCountKvp.Key, statusCountKvp.Value); + ModifyStatusCount(statusCountKvp.Key, statusCountKvp.Value); } RemovedCount += stats.RemovedCount; @@ -245,7 +245,7 @@ namespace SabreTools.Metadata.DatFiles RemovedCount--; // Decrement the item count for the type - RemoveItemCount(item.ItemType); + ModifyItemCount(item.ItemType, -1); // Some item types require special processing switch (item) @@ -286,12 +286,166 @@ namespace SabreTools.Metadata.DatFiles } /// - /// Increment the hash count for a given hash type + /// Add to the statistics for a given Disk /// - /// Hash type to increment - /// Amount to increment by, defaults to 1 - private void AddHashCount(HashType hashType, long interval = 1) + /// Item to add info from + private void AddItemStatistics(Disk disk) { + ItemStatus? status = disk.Status; + if (status != ItemStatus.Nodump) + { + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1); + } + + ModifyStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + ModifyStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + ModifyStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + ModifyStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); + } + + /// + /// Add to the statistics for a given File + /// + /// Item to add info from + private void AddItemStatistics(File file) + { + TotalSize += file.Size ?? 0; + ModifyHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : 1); + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : 1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : 1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(file.SHA256) ? 0 : 1); + } + + /// + /// Add to the statistics for a given Media + /// + /// Item to add info from + private void AddItemStatistics(Media media) + { + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1); + ModifyHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1); + } + + /// + /// Add to the statistics for a given Rom + /// + /// Item to add info from + private void AddItemStatistics(Rom rom) + { + ItemStatus? status = rom.Status; + if (status != ItemStatus.Nodump) + { + TotalSize += rom.Size ?? 0; + ModifyHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.CRC16) ? 0 : 1); + ModifyHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : 1); + ModifyHashCount(HashType.CRC64, string.IsNullOrEmpty(rom.CRC64) ? 0 : 1); + ModifyHashCount(HashType.MD2, string.IsNullOrEmpty(rom.MD2) ? 0 : 1); + ModifyHashCount(HashType.MD4, string.IsNullOrEmpty(rom.MD4) ? 0 : 1); + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1); + ModifyHashCount(HashType.RIPEMD128, string.IsNullOrEmpty(rom.RIPEMD128) ? 0 : 1); + ModifyHashCount(HashType.RIPEMD160, string.IsNullOrEmpty(rom.RIPEMD160) ? 0 : 1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1); + ModifyHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1); + ModifyHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1); + ModifyHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1); + } + + ModifyStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + ModifyStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + ModifyStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + ModifyStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); + } + + /// + /// Remove from the statistics given a Disk + /// + /// Item to remove info for + private void RemoveItemStatistics(Disk disk) + { + ItemStatus? status = disk.Status; + if (status != ItemStatus.Nodump) + { + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : -1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : -1); + } + + ModifyStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? -1 : 0); + ModifyStatusCount(ItemStatus.Good, status == ItemStatus.Good ? -1 : 0); + ModifyStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? -1 : 0); + ModifyStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? -1 : 0); + } + + /// + /// Remove from the statistics given a File + /// + /// Item to remove info for + private void RemoveItemStatistics(File file) + { + TotalSize -= file.Size ?? 0; + ModifyHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : -1); + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : -1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : -1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(file.SHA256) ? 0 : -1); + } + + /// + /// Remove from the statistics given a Media + /// + /// Item to remove info for + private void RemoveItemStatistics(Media media) + { + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : -1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : -1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : -1); + ModifyHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : -1); + } + + /// + /// Remove from the statistics given a Rom + /// + /// Item to remove info for + private void RemoveItemStatistics(Rom rom) + { + ItemStatus? status = rom.Status; + if (status != ItemStatus.Nodump) + { + TotalSize -= rom.Size ?? 0; + ModifyHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.CRC16) ? 0 : -1); + ModifyHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : -1); + ModifyHashCount(HashType.CRC64, string.IsNullOrEmpty(rom.CRC64) ? 0 : -1); + ModifyHashCount(HashType.MD2, string.IsNullOrEmpty(rom.MD2) ? 0 : -1); + ModifyHashCount(HashType.MD4, string.IsNullOrEmpty(rom.MD4) ? 0 : -1); + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : -1); + ModifyHashCount(HashType.RIPEMD128, string.IsNullOrEmpty(rom.RIPEMD128) ? 0 : -1); + ModifyHashCount(HashType.RIPEMD160, string.IsNullOrEmpty(rom.RIPEMD160) ? 0 : -1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : -1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : -1); + ModifyHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : -1); + ModifyHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : -1); + ModifyHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : -1); + } + + ModifyStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? -1 : 0); + ModifyStatusCount(ItemStatus.Good, status == ItemStatus.Good ? -1 : 0); + ModifyStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? -1 : 0); + ModifyStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? -1 : 0); + } + + /// + /// Modify the hash count for a given hash type + /// + /// Hash type to change + /// Amount to change by + private void ModifyHashCount(HashType hashType, long interval) + { + // Skip if the interval is 0 + if (interval == 0) + return; + lock (_hashCounts) { if (!_hashCounts.ContainsKey(hashType)) @@ -306,10 +460,14 @@ namespace SabreTools.Metadata.DatFiles /// /// Increment the item count for a given item type /// - /// Item type to increment - /// Amount to increment by, defaults to 1 - private void AddItemCount(Data.Models.Metadata.ItemType itemType, long interval = 1) + /// Item type to change + /// Amount to change by + private void ModifyItemCount(Data.Models.Metadata.ItemType itemType, long interval) { + // Skip if the interval is 0 + if (interval == 0) + return; + lock (_itemCounts) { if (!_itemCounts.ContainsKey(itemType)) @@ -321,88 +479,17 @@ namespace SabreTools.Metadata.DatFiles } } - /// - /// Add to the statistics for a given Disk - /// - /// Item to add info from - private void AddItemStatistics(Disk disk) - { - ItemStatus? status = disk.Status; - if (status != ItemStatus.Nodump) - { - AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1); - } - - AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - - /// - /// Add to the statistics for a given File - /// - /// Item to add info from - private void AddItemStatistics(File file) - { - TotalSize += file.Size ?? 0; - AddHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : 1); - AddHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(file.SHA256) ? 0 : 1); - } - - /// - /// Add to the statistics for a given Media - /// - /// Item to add info from - private void AddItemStatistics(Media media) - { - AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1); - AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1); - } - - /// - /// Add to the statistics for a given Rom - /// - /// Item to add info from - private void AddItemStatistics(Rom rom) - { - ItemStatus? status = rom.Status; - if (status != ItemStatus.Nodump) - { - TotalSize += rom.Size ?? 0; - AddHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.CRC16) ? 0 : 1); - AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : 1); - AddHashCount(HashType.CRC64, string.IsNullOrEmpty(rom.CRC64) ? 0 : 1); - AddHashCount(HashType.MD2, string.IsNullOrEmpty(rom.MD2) ? 0 : 1); - AddHashCount(HashType.MD4, string.IsNullOrEmpty(rom.MD4) ? 0 : 1); - AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1); - AddHashCount(HashType.RIPEMD128, string.IsNullOrEmpty(rom.RIPEMD128) ? 0 : 1); - AddHashCount(HashType.RIPEMD160, string.IsNullOrEmpty(rom.RIPEMD160) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1); - AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1); - AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1); - AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1); - } - - AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - /// /// Increment the item count for a given item status /// - /// Item type to increment - /// Amount to increment by, defaults to 1 - private void AddStatusCount(ItemStatus itemStatus, long interval = 1) + /// Item type to change + /// Amount to change by + private void ModifyStatusCount(ItemStatus itemStatus, long interval) { + // Skip if the interval is 0 + if (interval == 0) + return; + lock (_statusCounts) { if (!_statusCounts.ContainsKey(itemStatus)) @@ -414,135 +501,6 @@ namespace SabreTools.Metadata.DatFiles } } - /// - /// Decrement the hash count for a given hash type - /// - /// Hash type to increment - /// Amount to increment by, defaults to 1 - private void RemoveHashCount(HashType hashType, long interval = 1) - { - lock (_hashCounts) - { - if (!_hashCounts.ContainsKey(hashType)) - return; - - _hashCounts[hashType] -= interval; - if (_hashCounts[hashType] < 0) - _hashCounts[hashType] = 0; - } - } - - /// - /// Decrement the item count for a given item type - /// - /// Item type to decrement - /// Amount to increment by, defaults to 1 - private void RemoveItemCount(Data.Models.Metadata.ItemType itemType, long interval = 1) - { - lock (_itemCounts) - { - if (!_itemCounts.ContainsKey(itemType)) - return; - - _itemCounts[itemType] -= interval; - if (_itemCounts[itemType] < 0) - _itemCounts[itemType] = 0; - } - } - - /// - /// Remove from the statistics given a Disk - /// - /// Item to remove info for - private void RemoveItemStatistics(Disk disk) - { - ItemStatus? status = disk.Status; - if (status != ItemStatus.Nodump) - { - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1); - } - - RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - - /// - /// Remove from the statistics given a File - /// - /// Item to remove info for - private void RemoveItemStatistics(File file) - { - TotalSize -= file.Size ?? 0; - RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : 1); - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(file.SHA256) ? 0 : 1); - } - - /// - /// Remove from the statistics given a Media - /// - /// Item to remove info for - private void RemoveItemStatistics(Media media) - { - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1); - RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1); - } - - /// - /// Remove from the statistics given a Rom - /// - /// Item to remove info for - private void RemoveItemStatistics(Rom rom) - { - ItemStatus? status = rom.Status; - if (status != ItemStatus.Nodump) - { - TotalSize -= rom.Size ?? 0; - RemoveHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.CRC16) ? 0 : 1); - RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : 1); - RemoveHashCount(HashType.CRC64, string.IsNullOrEmpty(rom.CRC64) ? 0 : 1); - RemoveHashCount(HashType.MD2, string.IsNullOrEmpty(rom.MD2) ? 0 : 1); - RemoveHashCount(HashType.MD4, string.IsNullOrEmpty(rom.MD4) ? 0 : 1); - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1); - RemoveHashCount(HashType.RIPEMD128, string.IsNullOrEmpty(rom.RIPEMD128) ? 0 : 1); - RemoveHashCount(HashType.RIPEMD160, string.IsNullOrEmpty(rom.RIPEMD160) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1); - RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1); - RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1); - RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1); - } - - RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - - /// - /// Decrement the item count for a given item status - /// - /// Item type to decrement - /// Amount to increment by, defaults to 1 - private void RemoveStatusCount(ItemStatus itemStatus, long interval = 1) - { - lock (_statusCounts) - { - if (!_statusCounts.ContainsKey(itemStatus)) - return; - - _statusCounts[itemStatus] -= interval; - if (_statusCounts[itemStatus] < 0) - _statusCounts[itemStatus] = 0; - } - } - #endregion } }