diff --git a/OfflineMerge/OfflineMerge.cs b/OfflineMerge/OfflineMerge.cs index e7d417ff..70ef2594 100644 --- a/OfflineMerge/OfflineMerge.cs +++ b/OfflineMerge/OfflineMerge.cs @@ -172,18 +172,19 @@ namespace SabreTools Dictionary> netNew = new Dictionary>(); foreach (string key in completeDats.Keys) { - if (completeDats[key].Count == 1) + List 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 temp = new List(); - temp.Add(completeDats[key][0]); + temp.Add(rom); netNew.Add(key, temp); } } @@ -195,18 +196,19 @@ namespace SabreTools Dictionary> unneeded = new Dictionary>(); foreach (string key in completeDats.Keys) { - if (completeDats[key].Count == 1) + List 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 temp = new List(); - temp.Add(completeDats[key][0]); + temp.Add(rom); unneeded.Add(key, temp); } } @@ -231,18 +233,19 @@ namespace SabreTools Dictionary> newMissing = new Dictionary>(); foreach (string key in midMissing.Keys) { - if (midMissing[key].Count == 1) + List 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 temp = new List(); - temp.Add(midMissing[key][0]); + temp.Add(rom); newMissing.Add(key, temp); } } @@ -302,18 +305,19 @@ namespace SabreTools Dictionary> have = new Dictionary>(); foreach (string key in midHave.Keys) { - if (midHave[key].Count == 1) + List 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 temp = new List(); - temp.Add(midHave[key][0]); + temp.Add(rom); have.Add(key, temp); } } diff --git a/SabreHelper/Output.cs b/SabreHelper/Output.cs index 61caf02e..4f4a62de 100644 --- a/SabreHelper/Output.cs +++ b/SabreHelper/Output.cs @@ -154,7 +154,13 @@ namespace SabreTools.Helper long count = 0; foreach (List roms in dict.Values) { - foreach (RomData rom in roms) + List 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; - } } } diff --git a/SabreHelper/RomManipulation.cs b/SabreHelper/RomManipulation.cs index d1e89a1a..b91ef840 100644 --- a/SabreHelper/RomManipulation.cs +++ b/SabreHelper/RomManipulation.cs @@ -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; } - /// /// Sort a list of RomData objects by SystemID, SourceID, Game, and Name (in order) /// diff --git a/SabreHelper/Structs.cs b/SabreHelper/Structs.cs index 875d89f8..7e2647bf 100644 --- a/SabreHelper/Structs.cs +++ b/SabreHelper/Structs.cs @@ -18,5 +18,6 @@ public string CRC; public string MD5; public string SHA1; + public bool Dupe; } }