From b9388de8cbb28575253d46307cbe302830154a0b Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 6 Oct 2016 16:19:09 -0700 Subject: [PATCH] [DatItem] Add HasDuplicates method for when we don't care what the dupes actually are --- SabreTools.Helper/Objects/Dat/DatItem.cs | 72 ++++++++++++++++++++++++ SabreTools.Helper/Objects/SimpleSort.cs | 4 +- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/SabreTools.Helper/Objects/Dat/DatItem.cs b/SabreTools.Helper/Objects/Dat/DatItem.cs index 7c9bdab9..0a1da478 100644 --- a/SabreTools.Helper/Objects/Dat/DatItem.cs +++ b/SabreTools.Helper/Objects/Dat/DatItem.cs @@ -606,6 +606,78 @@ namespace SabreTools.Helper return true; } + /// + /// Check if a DAT contains the given rom + /// + /// Dat to match against + /// Logger object for console and/or file output + /// True if it contains the rom, false otherwise + public bool HasDuplicates(DatFile datdata, Logger logger) + { + // Check for an empty rom list first + if (datdata.Files == null || datdata.Files.Count == 0) + { + return false; + } + + // Get the correct dictionary based on what is available + string key = ""; + if (_itemType == ItemType.Rom && ((Rom)this).CRC != null) + { + key = ((Rom)this).CRC; + datdata.BucketByCRC(false, logger, false); + } + else if (_itemType == ItemType.Rom && ((Rom)this).MD5 != null) + { + key = ((Rom)this).MD5; + datdata.BucketByMD5(false, logger, false); + } + else if (_itemType == ItemType.Disk && ((Disk)this).MD5 != null) + { + key = ((Disk)this).MD5; + datdata.BucketByMD5(false, logger, false); + } + else if (_itemType == ItemType.Rom && ((Rom)this).SHA1 != null) + { + key = ((Rom)this).SHA1; + datdata.BucketBySHA1(false, logger, false); + } + else if (_itemType == ItemType.Disk && ((Disk)this).SHA1 != null) + { + key = ((Disk)this).SHA1; + datdata.BucketBySHA1(false, logger, false); + } + else if (_itemType == ItemType.Rom) + { + key = ((Rom)this).Size.ToString(); + datdata.BucketBySize(false, logger, false); + } + else + { + key = "-1"; + datdata.BucketBySize(false, logger, false); + } + + // If the key doesn't exist, return the empty list + if (!datdata.Files.ContainsKey(key)) + { + return false; + } + + // Try to find duplicates + List roms = datdata.Files[key]; + + foreach (DatItem rom in roms) + { + if (IsDuplicate(rom, logger)) + { + return true; + } + } + + return false; + } + /// /// List all duplicates found in a DAT based on a rom /// diff --git a/SabreTools.Helper/Objects/SimpleSort.cs b/SabreTools.Helper/Objects/SimpleSort.cs index 38fea0c7..2fb7b4ea 100644 --- a/SabreTools.Helper/Objects/SimpleSort.cs +++ b/SabreTools.Helper/Objects/SimpleSort.cs @@ -1035,7 +1035,7 @@ namespace SabreTools.Helper if (_datdata != null && _datdata.Files.Count > 0) { Rom rom = FileTools.GetFileInfo(input, _logger); - if (rom.GetDuplicates(_datdata, _logger).Count > 0) + if (rom.HasDuplicates(_datdata, _logger)) { _logger.User("File '" + input + "' existed in the DAT, skipping..."); continue; @@ -1062,7 +1062,7 @@ namespace SabreTools.Helper if (_datdata != null && _datdata.Files.Count > 0) { Rom rom = FileTools.GetFileInfo(file, _logger); - if (rom.GetDuplicates(_datdata, _logger).Count > 0) + if (rom.HasDuplicates(_datdata, _logger)) { _logger.User("File '" + file + "' existed in the DAT, skipping..."); continue;