From edee5cd99b1df17213408972cee985efdd62c6c5 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 2 May 2025 15:12:01 -0400 Subject: [PATCH] Add Models.Metadata methods to DatStatistics --- SabreTools.DatFiles/DatStatistics.cs | 184 +++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) diff --git a/SabreTools.DatFiles/DatStatistics.cs b/SabreTools.DatFiles/DatStatistics.cs index 593821ac..6bd132c7 100644 --- a/SabreTools.DatFiles/DatStatistics.cs +++ b/SabreTools.DatFiles/DatStatistics.cs @@ -138,6 +138,40 @@ namespace SabreTools.DatFiles } } + /// + /// Add to the statistics for a given DatItem + /// + /// Item to add info from + public void AddItemStatistics(Models.Metadata.DatItem item) + { + lock (statsLock) + { + // No matter what the item is, we increment the count + TotalCount++; + + // Increment removal count + if (item.ReadBool(DatItem.RemoveKey) == true) + RemovedCount++; + + // Increment the item count for the type + AddItemCount(item.ReadString(Models.Metadata.DatItem.TypeKey).AsEnumValue()); + + // Some item types require special processing + switch (item) + { + case Models.Metadata.Disk disk: + AddItemStatistics(disk); + break; + case Models.Metadata.Media media: + AddItemStatistics(media); + break; + case Models.Metadata.Rom rom: + AddItemStatistics(rom); + break; + } + } + } + /// /// Add statistics from another DatStatistics object /// @@ -260,6 +294,44 @@ namespace SabreTools.DatFiles } } + /// + /// Remove from the statistics given a DatItem + /// + /// Item to remove info for + public void RemoveItemStatistics(Models.Metadata.DatItem item) + { + // If we have a null item, we can't do anything + if (item == null) + return; + + lock (statsLock) + { + // No matter what the item is, we decrease the count + TotalCount--; + + // Decrement removal count + if (item.ReadBool(DatItem.RemoveKey) == true) + RemovedCount--; + + // Decrement the item count for the type + RemoveItemCount(item.ReadString(Models.Metadata.DatItem.TypeKey).AsEnumValue()); + + // Some item types require special processing + switch (item) + { + case Models.Metadata.Disk disk: + RemoveItemStatistics(disk); + break; + case Models.Metadata.Media media: + RemoveItemStatistics(media); + break; + case Models.Metadata.Rom rom: + RemoveItemStatistics(rom); + break; + } + } + } + /// /// Reset all statistics /// @@ -329,6 +401,24 @@ namespace SabreTools.DatFiles AddStatusCount(ItemStatus.Verified, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); } + /// + /// Add to the statistics for a given Disk + /// + /// Item to add info from + private void AddItemStatistics(Models.Metadata.Disk disk) + { + if (disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() != ItemStatus.Nodump) + { + AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Models.Metadata.Disk.MD5Key)) ? 0 : 1); + AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Models.Metadata.Disk.SHA1Key)) ? 0 : 1); + } + + AddStatusCount(ItemStatus.BadDump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); + AddStatusCount(ItemStatus.Good, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); + AddStatusCount(ItemStatus.Nodump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); + AddStatusCount(ItemStatus.Verified, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + } + /// /// Add to the statistics for a given File /// @@ -354,6 +444,18 @@ namespace SabreTools.DatFiles AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); } + /// + /// Add to the statistics for a given Media + /// + /// Item to add info from + private void AddItemStatistics(Models.Metadata.Media media) + { + AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.ReadString(Models.Metadata.Media.MD5Key)) ? 0 : 1); + AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.ReadString(Models.Metadata.Media.SHA1Key)) ? 0 : 1); + AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.ReadString(Models.Metadata.Media.SHA256Key)) ? 0 : 1); + AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.ReadString(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); + } + /// /// Add to the statistics for a given Rom /// @@ -380,6 +482,32 @@ namespace SabreTools.DatFiles AddStatusCount(ItemStatus.Verified, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); } + /// + /// Add to the statistics for a given Rom + /// + /// Item to add info from + private void AddItemStatistics(Models.Metadata.Rom rom) + { + if (rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump) + { + TotalSize += rom.ReadLong(Models.Metadata.Rom.SizeKey) ?? 0; + AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.CRCKey)) ? 0 : 1); + AddHashCount(HashType.MD2, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.MD2Key)) ? 0 : 1); + AddHashCount(HashType.MD4, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.MD4Key)) ? 0 : 1); + AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.MD5Key)) ? 0 : 1); + AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); + AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); + AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SHA384Key)) ? 0 : 1); + AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SHA512Key)) ? 0 : 1); + AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); + } + + AddStatusCount(ItemStatus.BadDump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); + AddStatusCount(ItemStatus.Good, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); + AddStatusCount(ItemStatus.Nodump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); + AddStatusCount(ItemStatus.Verified, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + } + /// /// Increment the item count for a given item status /// @@ -452,6 +580,24 @@ namespace SabreTools.DatFiles RemoveStatusCount(ItemStatus.Verified, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); } + /// + /// Remove from the statistics given a Disk + /// + /// Item to remove info for + private void RemoveItemStatistics(Models.Metadata.Disk disk) + { + if (disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() != ItemStatus.Nodump) + { + RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Models.Metadata.Disk.MD5Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Models.Metadata.Disk.SHA1Key)) ? 0 : 1); + } + + RemoveStatusCount(ItemStatus.BadDump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); + RemoveStatusCount(ItemStatus.Good, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); + RemoveStatusCount(ItemStatus.Nodump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); + RemoveStatusCount(ItemStatus.Verified, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + } + /// /// Remove from the statistics given a File /// @@ -477,6 +623,18 @@ namespace SabreTools.DatFiles RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); } + /// + /// Remove from the statistics given a Media + /// + /// Item to remove info for + private void RemoveItemStatistics(Models.Metadata.Media media) + { + RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.ReadString(Models.Metadata.Media.MD5Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.ReadString(Models.Metadata.Media.SHA1Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.ReadString(Models.Metadata.Media.SHA256Key)) ? 0 : 1); + RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.ReadString(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); + } + /// /// Remove from the statistics given a Rom /// @@ -503,6 +661,32 @@ namespace SabreTools.DatFiles RemoveStatusCount(ItemStatus.Verified, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); } + /// + /// Remove from the statistics given a Rom + /// + /// Item to remove info for + private void RemoveItemStatistics(Models.Metadata.Rom rom) + { + if (rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump) + { + TotalSize -= rom.ReadLong(Models.Metadata.Rom.SizeKey) ?? 0; + RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.CRCKey)) ? 0 : 1); + RemoveHashCount(HashType.MD2, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.MD2Key)) ? 0 : 1); + RemoveHashCount(HashType.MD4, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.MD4Key)) ? 0 : 1); + RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.MD5Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SHA384Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SHA512Key)) ? 0 : 1); + RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); + } + + RemoveStatusCount(ItemStatus.BadDump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); + RemoveStatusCount(ItemStatus.Good, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); + RemoveStatusCount(ItemStatus.Nodump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); + RemoveStatusCount(ItemStatus.Verified, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + } + /// /// Decrement the item count for a given item status ///