diff --git a/OfflineMerge/OfflineMerge.cs b/OfflineMerge/OfflineMerge.cs index 0b55d9c9..a9a0fff7 100644 --- a/OfflineMerge/OfflineMerge.cs +++ b/OfflineMerge/OfflineMerge.cs @@ -28,38 +28,24 @@ namespace SabreTools { // Instance variables private string _currentAllMerged; - private string _currentAllMissing; - private List _toAdd; - private string _currentWithReplaced; + private string _currentMissingMerged; + private string _currentNewMerged; private bool _fake; private Logger _logger; /// /// Instantiate an OfflineMerge object /// - /// Old-current DAT with merged values - /// Old-current missing DAT with merged values - /// List of new files to merge in - /// New-current DAT with merged values + /// Old-current DAT with merged and deduped values + /// Old-current missing DAT with merged and deduped values + /// New-current DAT with merged and deduped values /// True if all values should be replaced with default 0-byte values, false otherwise /// Logger object for console and file output - public OfflineMerge (string currentAllMerged, string currentAllMissing, string toAdd, string currentWithReplaced, bool fake, Logger logger) + public OfflineMerge (string currentAllMerged, string currentMissingMerged, string currentNewMerged, bool fake, Logger logger) { _currentAllMerged = currentAllMerged.Replace("\"", ""); - _currentAllMissing = currentAllMissing.Replace("\"", ""); - _toAdd = new List(); - if (File.Exists(toAdd.Replace("\"", ""))) - { - _toAdd.Add(toAdd.Replace("\"", "")); - } - else if (Directory.Exists(toAdd.Replace("\"", ""))) - { - foreach (string file in Directory.EnumerateFiles(toAdd, "*", SearchOption.AllDirectories)) - { - _toAdd.Add(file); - } - } - _currentWithReplaced = currentWithReplaced; + _currentMissingMerged = currentMissingMerged.Replace("\"", ""); + _currentNewMerged = currentNewMerged; _fake = fake; _logger = logger; } @@ -71,9 +57,9 @@ namespace SabreTools /// /// Process the supplied inputs and create the three required outputs: - /// (a) Net New - (currentWithReplaced)-(currentAllMerged) - /// (b) New Missing - (a)+(currentAllMissing) - /// (c) Unneeded - (currentAllMerged)-(currentWithReplaced) + /// (a) Net New - (currentNewMerged)-(currentAllMerged) + /// (b) Unneeded - (currentAllMerged)-(currentNewMerged) + /// (c) New Missing - (a)+(currentMissingMerged-(b)) /// /// True if the files were created properly, false otherwise public bool Process() @@ -81,7 +67,7 @@ namespace SabreTools // First get the combination Dictionary of currentWithReplaced and currentAllMerged Dictionary> completeDats = new Dictionary>(); completeDats = RomManipulation.ParseDict(_currentAllMerged, 0, 0, completeDats, _logger); - completeDats = RomManipulation.ParseDict(_currentWithReplaced, 0, 0, completeDats, _logger); + completeDats = RomManipulation.ParseDict(_currentNewMerged, 0, 0, completeDats, _logger); // Now get Net New output dictionary Dictionary> netNew = new Dictionary>(); @@ -89,7 +75,7 @@ namespace SabreTools { if (completeDats[key].Count == 1) { - if (completeDats[key][0].System == _currentWithReplaced) + if (completeDats[key][0].System == _currentNewMerged) { if (netNew.ContainsKey(key)) { @@ -106,10 +92,6 @@ namespace SabreTools } } - // Now create the New Missing dictionary - Dictionary> newMissing = new Dictionary>(netNew); - newMissing = RomManipulation.ParseDict(_currentAllMissing, 0, 0, newMissing, _logger); - // Now create the Unneeded dictionary Dictionary> unneeded = new Dictionary>(); foreach (string key in completeDats.Keys) @@ -133,6 +115,52 @@ namespace SabreTools } } + // Now create the New Missing dictionary + Dictionary> midMissing = new Dictionary>(); + midMissing = RomManipulation.ParseDict(_currentMissingMerged, 0, 0, midMissing, _logger); + foreach (string key in unneeded.Keys) + { + if (midMissing.ContainsKey(key)) + { + midMissing[key].AddRange(unneeded[key]); + } + else + { + midMissing.Add(key, unneeded[key]); + } + } + Dictionary> newMissing = new Dictionary>(); + foreach (string key in midMissing.Keys) + { + if (midMissing[key].Count == 1) + { + if (midMissing[key][0].System == _currentMissingMerged) + { + if (newMissing.ContainsKey(key)) + { + newMissing[key].Add(midMissing[key][0]); + } + else + { + List temp = new List(); + temp.Add(midMissing[key][0]); + newMissing.Add(key, temp); + } + } + } + } + foreach (string key in netNew.Keys) + { + if (midMissing.ContainsKey(key)) + { + midMissing[key].AddRange(netNew[key]); + } + else + { + midMissing.Add(key, netNew[key]); + } + } + return true; } }