diff --git a/DATabase/ImportExport/Generate.cs b/DATabase/ImportExport/Generate.cs index 8253474a..cd8f8102 100644 --- a/DATabase/ImportExport/Generate.cs +++ b/DATabase/ImportExport/Generate.cs @@ -284,7 +284,7 @@ JOIN checksums { foreach (string key in roms.Keys) { - roms[key] = RomManipulation.Merge(roms[key]); + roms[key] = RomManipulation.Merge(roms[key], _logger); } } // END COMMENT diff --git a/DATabase/ImportExport/Import.cs b/DATabase/ImportExport/Import.cs index 04f7a23d..97f20d01 100644 --- a/DATabase/ImportExport/Import.cs +++ b/DATabase/ImportExport/Import.cs @@ -378,7 +378,7 @@ namespace SabreTools List newroms = roms; if (datdata.MergeRoms) { - newroms = RomManipulation.Merge(newroms); + newroms = RomManipulation.Merge(newroms, _logger); } foreach (RomData rom in newroms) diff --git a/DATabase/MergeDiff.cs b/DATabase/MergeDiff.cs index e07799c8..7ce31619 100644 --- a/DATabase/MergeDiff.cs +++ b/DATabase/MergeDiff.cs @@ -193,7 +193,7 @@ namespace SabreTools foreach (string key in userData.Roms.Keys) { List temp = userData.Roms[key]; - temp = RomManipulation.Merge(temp); + temp = RomManipulation.Merge(temp, _logger); foreach (RomData rom in temp) { @@ -281,7 +281,7 @@ namespace SabreTools foreach (string key in userData.Roms.Keys) { List temp = userData.Roms[key]; - temp = RomManipulation.Merge(temp); + temp = RomManipulation.Merge(temp, _logger); foreach (RomData rom in temp) { @@ -342,7 +342,7 @@ namespace SabreTools List keys = userData.Roms.Keys.ToList(); foreach (string key in keys) { - List oldroms = RomManipulation.Merge(userData.Roms[key]); + List oldroms = RomManipulation.Merge(userData.Roms[key], _logger); List newroms = new List(); foreach (RomData rom in oldroms) diff --git a/OfflineMerge/OfflineMerge.cs b/OfflineMerge/OfflineMerge.cs index 31fcfae7..bdec75fe 100644 --- a/OfflineMerge/OfflineMerge.cs +++ b/OfflineMerge/OfflineMerge.cs @@ -153,7 +153,7 @@ namespace SabreTools Dictionary> netNew = new Dictionary>(); foreach (string key in completeDats.Roms.Keys) { - List templist = RomManipulation.Merge(completeDats.Roms[key]); + List templist = RomManipulation.Merge(completeDats.Roms[key], _logger); foreach (RomData rom in templist) { if (rom.Dupe == DupeType.None && rom.System == _currentNewMerged) @@ -177,7 +177,7 @@ namespace SabreTools Dictionary> unneeded = new Dictionary>(); foreach (string key in completeDats.Roms.Keys) { - List templist = RomManipulation.Merge(completeDats.Roms[key]); + List templist = RomManipulation.Merge(completeDats.Roms[key], _logger); foreach (RomData rom in templist) { if (rom.Dupe == DupeType.None && rom.System == _currentAllMerged) @@ -214,7 +214,7 @@ namespace SabreTools Dictionary> newMissing = new Dictionary>(); foreach (string key in midMissing.Roms.Keys) { - List templist = RomManipulation.Merge(midMissing.Roms[key]); + List templist = RomManipulation.Merge(midMissing.Roms[key], _logger); foreach (RomData rom in templist) { if (rom.Dupe == DupeType.None && rom.System == _currentMissingMerged) @@ -286,7 +286,7 @@ namespace SabreTools Dictionary> have = new Dictionary>(); foreach (string key in midHave.Keys) { - List templist = RomManipulation.Merge(midHave[key]); + List templist = RomManipulation.Merge(midHave[key], _logger); foreach (RomData rom in templist) { if (rom.Dupe == DupeType.None && rom.System == _currentNewMerged) @@ -454,7 +454,7 @@ namespace SabreTools Dictionary> have = new Dictionary>(); foreach (string key in midHave.Roms.Keys) { - List templist = RomManipulation.Merge(midHave.Roms[key]); + List templist = RomManipulation.Merge(midHave.Roms[key], _logger); foreach (RomData rom in templist) { if (rom.Dupe == DupeType.None && rom.System == _currentAllMerged) @@ -524,7 +524,7 @@ namespace SabreTools Dictionary> have = new Dictionary>(); foreach (string key in midHave.Roms.Keys) { - List templist = RomManipulation.Merge(midHave.Roms[key]); + List templist = RomManipulation.Merge(midHave.Roms[key], _logger); foreach (RomData rom in templist) { if (rom.Dupe == DupeType.None && rom.System == _currentNewMerged) diff --git a/SabreHelper/RomManipulation.cs b/SabreHelper/RomManipulation.cs index 3eb9dc73..87d1a475 100644 --- a/SabreHelper/RomManipulation.cs +++ b/SabreHelper/RomManipulation.cs @@ -59,7 +59,6 @@ namespace SabreTools.Helper } XmlTextReader xtr; - StringReader sr; xtr = new XmlTextReader(filename); xtr.WhitespaceHandling = WhitespaceHandling.None; xtr.DtdProcessing = DtdProcessing.Ignore; @@ -395,7 +394,6 @@ namespace SabreTools.Helper StreamReader sr = new StreamReader(File.OpenRead(filename)); string blocktype = ""; - string lastgame = null; while (!sr.EndOfStream) { string line = sr.ReadLine(); @@ -1263,32 +1261,29 @@ namespace SabreTools.Helper /// Merge an arbitrary set of ROMs based on the supplied information /// /// List of RomData objects representing the roms to be merged - /// True if the list should be considered pre-sorted (default false) + /// Logger object for console and/or file output /// A List of RomData objects representing the merged roms - public static List Merge(List inroms, bool presorted = false) + public static List Merge(List inroms, Logger logger) { List outroms = new List(); - // First sort the roms by size, crc, md5, sha1 (in order), if not sorted already - if (!presorted) + // First sort the roms by size, crc, md5, sha1 (in order) + inroms.Sort(delegate (RomData x, RomData y) { - inroms.Sort(delegate (RomData x, RomData y) + if (x.Size == y.Size) { - if (x.Size == y.Size) + if (x.CRC == y.CRC) { - if (x.CRC == y.CRC) + if (x.MD5 == y.MD5) { - if (x.MD5 == y.MD5) - { - return String.Compare(x.SHA1, y.SHA1); - } - return String.Compare(x.MD5, y.MD5); + return String.Compare(x.SHA1, y.SHA1); } - return String.Compare(x.CRC, y.CRC); + return String.Compare(x.MD5, y.MD5); } - return (int)(x.Size - y.Size); - }); - } + return String.Compare(x.CRC, y.CRC); + } + return (int)(x.Size - y.Size); + }); // Then, deduplicate them by checking to see if data matches foreach (RomData rom in inroms) @@ -1335,6 +1330,8 @@ namespace SabreTools.Helper // If it's a duplicate, skip adding it to the output but add any missing information if (dupefound) { + logger.Log("Rom information of found duplicate: " + rom.Game + "\t" + rom.Name + "\t" + rom.Size + "\t" + rom.CRC + "\t" + rom.MD5 + "\t" + rom.SHA1); + savedrom = lastrom; pos = i; @@ -1456,7 +1453,7 @@ namespace SabreTools.Helper List newroms = roms; if (mergeroms) { - newroms = RomManipulation.Merge(newroms); + newroms = RomManipulation.Merge(newroms, logger); } foreach (RomData rom in newroms)