Make merging more robust

This commit is contained in:
Matt Nadareski
2016-05-03 23:59:32 -07:00
parent 455c5c25e1
commit 411115083d
4 changed files with 30 additions and 24 deletions

View File

@@ -172,18 +172,19 @@ namespace SabreTools
Dictionary<string, List<RomData>> netNew = new Dictionary<string, List<RomData>>();
foreach (string key in completeDats.Keys)
{
if (completeDats[key].Count == 1)
List<RomData> templist = RomManipulation.Merge(completeDats[key]);
foreach (RomData rom in templist)
{
if (completeDats[key][0].System == _currentNewMerged)
if (!rom.Dupe && rom.System == _currentNewMerged)
{
if (netNew.ContainsKey(key))
{
netNew[key].Add(completeDats[key][0]);
netNew[key].Add(rom);
}
else
{
List<RomData> temp = new List<RomData>();
temp.Add(completeDats[key][0]);
temp.Add(rom);
netNew.Add(key, temp);
}
}
@@ -195,18 +196,19 @@ namespace SabreTools
Dictionary<string, List<RomData>> unneeded = new Dictionary<string, List<RomData>>();
foreach (string key in completeDats.Keys)
{
if (completeDats[key].Count == 1)
List<RomData> templist = RomManipulation.Merge(completeDats[key]);
foreach (RomData rom in templist)
{
if (completeDats[key][0].System == _currentAllMerged)
if (!rom.Dupe && rom.System == _currentAllMerged)
{
if (unneeded.ContainsKey(key))
{
unneeded[key].Add(completeDats[key][0]);
unneeded[key].Add(rom);
}
else
{
List<RomData> temp = new List<RomData>();
temp.Add(completeDats[key][0]);
temp.Add(rom);
unneeded.Add(key, temp);
}
}
@@ -231,18 +233,19 @@ namespace SabreTools
Dictionary<string, List<RomData>> newMissing = new Dictionary<string, List<RomData>>();
foreach (string key in midMissing.Keys)
{
if (midMissing[key].Count == 1)
List<RomData> templist = RomManipulation.Merge(midMissing[key]);
foreach (RomData rom in templist)
{
if (midMissing[key][0].System == _currentMissingMerged)
if (!rom.Dupe && rom.System == _currentMissingMerged)
{
if (newMissing.ContainsKey(key))
{
newMissing[key].Add(midMissing[key][0]);
newMissing[key].Add(rom);
}
else
{
List<RomData> temp = new List<RomData>();
temp.Add(midMissing[key][0]);
temp.Add(rom);
newMissing.Add(key, temp);
}
}
@@ -302,18 +305,19 @@ namespace SabreTools
Dictionary<string, List<RomData>> have = new Dictionary<string, List<RomData>>();
foreach (string key in midHave.Keys)
{
if (midHave[key].Count == 1)
List<RomData> templist = RomManipulation.Merge(midHave[key]);
foreach (RomData rom in templist)
{
if (midHave[key][0].System == _currentNewMerged)
if (!rom.Dupe && rom.System == _currentNewMerged)
{
if (have.ContainsKey(key))
{
have[key].Add(midHave[key][0]);
have[key].Add(rom);
}
else
{
List<RomData> temp = new List<RomData>();
temp.Add(midHave[key][0]);
temp.Add(rom);
have.Add(key, temp);
}
}

View File

@@ -154,7 +154,13 @@ namespace SabreTools.Helper
long count = 0;
foreach (List<RomData> roms in dict.Values)
{
foreach (RomData rom in roms)
List<RomData> newroms = roms;
if (merge)
{
newroms = RomManipulation.Merge(newroms);
}
foreach (RomData rom in newroms)
{
count++;
string key = rom.SystemID + "-" + rom.SourceID + "-" + rom.Game + "-" + rom.Name;
@@ -168,11 +174,6 @@ namespace SabreTools.Helper
temp.Add(rom);
sortable.Add(key, temp);
}
if (merge)
{
break;
}
}
}

View File

@@ -467,7 +467,7 @@ namespace SabreTools.Helper
sha1 = (sha1.StartsWith("0x") ? sha1.Remove(0, 2) : sha1);
// Get the new values to add
string key = crc + "-" + md5 + "-" + sha1 + "-" + size;
string key = crc + "-" + size;
RomData value = new RomData
{
Game = tempname,
@@ -590,6 +590,7 @@ namespace SabreTools.Helper
last.CRC = (last.CRC == "" && rom.CRC != "" ? rom.CRC : last.CRC);
last.MD5 = (last.MD5 == "" && rom.MD5 != "" ? rom.MD5 : last.MD5);
last.SHA1 = (last.SHA1 == "" && rom.SHA1 != "" ? rom.SHA1 : last.SHA1);
last.Dupe = true;
outroms.RemoveAt(outroms.Count - 1);
outroms.Insert(outroms.Count, last);
@@ -611,7 +612,6 @@ namespace SabreTools.Helper
return outroms;
}
/// <summary>
/// Sort a list of RomData objects by SystemID, SourceID, Game, and Name (in order)
/// </summary>

View File

@@ -18,5 +18,6 @@
public string CRC;
public string MD5;
public string SHA1;
public bool Dupe;
}
}