[DatFile, DatItem] More instance method usage

This commit is contained in:
Matt Nadareski
2016-09-22 20:30:04 -07:00
parent 356032f561
commit e245fc8b9b
3 changed files with 79 additions and 69 deletions

View File

@@ -2850,7 +2850,7 @@ namespace SabreTools.Helper
}
// If the rom passes the filter, include it
if (DatItem.Filter(item, gamename, romname, romtype, sgt, slt, seq, crc, md5, sha1, itemStatus, logger))
if (item.Filter(gamename, romname, romtype, sgt, slt, seq, crc, md5, sha1, itemStatus, logger))
{
// If we are in single game mode, rename all games
if (single)

View File

@@ -234,12 +234,13 @@ namespace SabreTools.Helper
#endregion
#region Sorting and merging
#region Instance Methods
#region Sorting and Merging
/// <summary>
/// Determine if a rom should be included based on filters
/// </summary>
/// <param name="itemdata">User supplied item to check</param>
/// <param name="gamename">Name of the game to match (can use asterisk-partials)</param>
/// <param name="romname">Name of the rom to match (can use asterisk-partials)</param>
/// <param name="romtype">Type of the rom to match</param>
@@ -252,13 +253,13 @@ namespace SabreTools.Helper
/// <param name="itemStatus">Select roms with the given status</param>
/// <param name="logger">Logging object for console and file output</param>
/// <returns>Returns true if it should be included, false otherwise</returns>
public static bool Filter(DatItem itemdata, string gamename, string romname, string romtype, long sgt,
public bool Filter(string gamename, string romname, string romtype, long sgt,
long slt, long seq, string crc, string md5, string sha1, ItemStatus itemStatus, Logger logger)
{
// Take care of Rom and Disk specific differences
if (itemdata.Type == ItemType.Rom)
if (Type == ItemType.Rom)
{
Rom rom = (Rom)itemdata;
Rom rom = (Rom)this;
// Filter on status
if (itemStatus != ItemStatus.NULL)
@@ -389,9 +390,9 @@ namespace SabreTools.Helper
}
}
}
else if (itemdata.Type == ItemType.Disk)
else if (Type == ItemType.Disk)
{
Disk rom = (Disk)itemdata;
Disk rom = (Disk)this;
// Filter on status
if (itemStatus != ItemStatus.NULL && rom.ItemStatus != itemStatus)
@@ -471,28 +472,28 @@ namespace SabreTools.Helper
{
if (gamename.StartsWith("*") && gamename.EndsWith("*"))
{
if (!itemdata.MachineName.ToLowerInvariant().Contains(gamename.ToLowerInvariant().Replace("*", "")))
if (!MachineName.ToLowerInvariant().Contains(gamename.ToLowerInvariant().Replace("*", "")))
{
return false;
}
}
else if (gamename.StartsWith("*"))
{
if (!itemdata.MachineName.EndsWith(gamename.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
if (!MachineName.EndsWith(gamename.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
{
return false;
}
}
else if (gamename.EndsWith("*"))
{
if (!itemdata.MachineName.StartsWith(gamename.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
if (!MachineName.StartsWith(gamename.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
{
return false;
}
}
else
{
if (!String.Equals(itemdata.MachineName, gamename, StringComparison.InvariantCultureIgnoreCase))
if (!String.Equals(MachineName, gamename, StringComparison.InvariantCultureIgnoreCase))
{
return false;
}
@@ -504,28 +505,28 @@ namespace SabreTools.Helper
{
if (romname.StartsWith("*") && romname.EndsWith("*"))
{
if (!itemdata.Name.ToLowerInvariant().Contains(romname.ToLowerInvariant().Replace("*", "")))
if (!Name.ToLowerInvariant().Contains(romname.ToLowerInvariant().Replace("*", "")))
{
return false;
}
}
else if (romname.StartsWith("*"))
{
if (!itemdata.Name.EndsWith(romname.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
if (!Name.EndsWith(romname.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
{
return false;
}
}
else if (romname.EndsWith("*"))
{
if (!itemdata.Name.StartsWith(romname.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
if (!Name.StartsWith(romname.Replace("*", ""), StringComparison.InvariantCultureIgnoreCase))
{
return false;
}
}
else
{
if (!String.Equals(itemdata.Name, romname, StringComparison.InvariantCultureIgnoreCase))
if (!String.Equals(Name, romname, StringComparison.InvariantCultureIgnoreCase))
{
return false;
}
@@ -533,11 +534,11 @@ namespace SabreTools.Helper
}
// Filter on rom type
if (String.IsNullOrEmpty(romtype) && itemdata.Type != ItemType.Rom && itemdata.Type != ItemType.Disk)
if (String.IsNullOrEmpty(romtype) && Type != ItemType.Rom && Type != ItemType.Disk)
{
return false;
}
if (!String.IsNullOrEmpty(romtype) && !String.Equals(itemdata.Type.ToString(), romtype, StringComparison.InvariantCultureIgnoreCase))
if (!String.IsNullOrEmpty(romtype) && !String.Equals(Type.ToString(), romtype, StringComparison.InvariantCultureIgnoreCase))
{
return false;
}
@@ -545,6 +546,60 @@ namespace SabreTools.Helper
return true;
}
/// <summary>
/// List all duplicates found in a DAT based on a rom
/// </summary>
/// <param name="datdata">Dat to match against</param>
/// <param name="logger">Logger object for console and/or file output</param>
/// <param name="remove">True to remove matched roms from the input, false otherwise (default)</param>
/// <returns>List of matched DatItem objects</returns>
public List<DatItem> GetDuplicates(DatFile datdata, Logger logger, bool remove = false)
{
List<DatItem> output = new List<DatItem>();
// Check for an empty rom list first
if (datdata.Files == null || datdata.Files.Count == 0)
{
return output;
}
// Try to find duplicates
List<string> keys = datdata.Files.Keys.ToList();
foreach (string key in keys)
{
List<DatItem> roms = datdata.Files[key];
List<DatItem> left = new List<DatItem>();
foreach (DatItem rom in roms)
{
if (IsDuplicate(rom, logger))
{
output.Add(rom);
}
else
{
left.Add(rom);
}
}
// If we're in removal mode, replace the list with the new one
if (remove)
{
datdata.Files[key] = left;
}
}
return output;
}
#endregion
#endregion // Instance Methods
#region Static Methods
#region Sorting and Merging
/// <summary>
/// Merge an arbitrary set of ROMs based on the supplied information
/// </summary>
@@ -673,53 +728,6 @@ namespace SabreTools.Helper
return outfiles;
}
/// <summary>
/// List all duplicates found in a DAT based on a rom
/// </summary>
/// <param name="lastitem">Item to use as a base</param>
/// <param name="datdata">Dat to match against</param>
/// <param name="logger">Logger object for console and/or file output</param>
/// <param name="remove">True to remove matched roms from the input, false otherwise (default)</param>
/// <returns>List of matched DatItem objects</returns>
public static List<DatItem> GetDuplicates(DatItem lastitem, DatFile datdata, Logger logger, bool remove = false)
{
List<DatItem> output = new List<DatItem>();
// Check for an empty rom list first
if (datdata.Files == null || datdata.Files.Count == 0)
{
return output;
}
// Try to find duplicates
List<string> keys = datdata.Files.Keys.ToList();
foreach (string key in keys)
{
List<DatItem> roms = datdata.Files[key];
List<DatItem> left = new List<DatItem>();
foreach (DatItem rom in roms)
{
if (rom.IsDuplicate(lastitem, logger))
{
output.Add(rom);
}
else
{
left.Add(rom);
}
}
// If we're in removal mode, replace the list with the new one
if (remove)
{
datdata.Files[key] = left;
}
}
return output;
}
/// <summary>
/// Sort a list of File objects by SystemID, SourceID, Game, and Name (in order)
/// </summary>
@@ -779,5 +787,7 @@ namespace SabreTools.Helper
}
#endregion
#endregion // Static Methods
}
}

View File

@@ -414,7 +414,7 @@ namespace SabreTools.Helper
{
foreach (DatItem rom in matchdat.Files[key])
{
List<DatItem> matched = DatItem.GetDuplicates(rom, _datdata, _logger, true);
List<DatItem> matched = rom.GetDuplicates(_datdata, _logger, true);
foreach (DatItem match in matched)
{
try
@@ -551,7 +551,7 @@ namespace SabreTools.Helper
}
// Try to find the matches to the file that was found
List<DatItem> foundroms = DatItem.GetDuplicates(rom, _datdata, _logger);
List<DatItem> foundroms = rom.GetDuplicates(_datdata, _logger);
_logger.Log("File '" + input + "' had " + foundroms.Count + " matches in the DAT!");
foreach (Rom found in foundroms)
{
@@ -621,7 +621,7 @@ namespace SabreTools.Helper
}
// Try to find the matches to the file that was found
List<DatItem> founddroms = DatItem.GetDuplicates(drom, _datdata, _logger);
List<DatItem> founddroms = drom.GetDuplicates(_datdata, _logger);
_logger.Log("File '" + newinput + "' had " + founddroms.Count + " matches in the DAT!");
foreach (Rom found in founddroms)
{
@@ -756,7 +756,7 @@ namespace SabreTools.Helper
foreach (Rom rom in internalRomData)
{
// Try to find the matches to the file that was found
List<DatItem> foundroms = DatItem.GetDuplicates(rom, _datdata, _logger);
List<DatItem> foundroms = rom.GetDuplicates(_datdata, _logger);
_logger.Log("File '" + rom.Name + "' had " + foundroms.Count + " matches in the DAT!");
foreach (Rom found in foundroms)
{