From ce4d84c7d462326149520ace6acecb0df402ed57 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 14 Dec 2017 14:46:03 -0800 Subject: [PATCH] [SabreTools, DatFiles/] Fix merging, fix replacement --- SabreTools.Library/DatFiles/AttractMode.cs | 1 + SabreTools.Library/DatFiles/ClrMamePro.cs | 1 + SabreTools.Library/DatFiles/DatFile.cs | 53 +++++++++++-------- SabreTools.Library/DatFiles/DosCenter.cs | 1 + SabreTools.Library/DatFiles/Hashfile.cs | 1 + SabreTools.Library/DatFiles/Listroms.cs | 1 + SabreTools.Library/DatFiles/Logiqx.cs | 1 + SabreTools.Library/DatFiles/Missfile.cs | 1 + SabreTools.Library/DatFiles/OfflineList.cs | 1 + SabreTools.Library/DatFiles/RomCenter.cs | 1 + SabreTools.Library/DatFiles/SabreDat.cs | 1 + SabreTools.Library/DatFiles/SeparatedValue.cs | 1 + SabreTools.Library/DatFiles/SoftwareList.cs | 2 +- SabreTools/SabreTools.cs | 6 ++- 14 files changed, 48 insertions(+), 24 deletions(-) diff --git a/SabreTools.Library/DatFiles/AttractMode.cs b/SabreTools.Library/DatFiles/AttractMode.cs index 2b0d6975..5847120c 100644 --- a/SabreTools.Library/DatFiles/AttractMode.cs +++ b/SabreTools.Library/DatFiles/AttractMode.cs @@ -33,6 +33,7 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; } diff --git a/SabreTools.Library/DatFiles/ClrMamePro.cs b/SabreTools.Library/DatFiles/ClrMamePro.cs index 29e7d98a..232c618a 100644 --- a/SabreTools.Library/DatFiles/ClrMamePro.cs +++ b/SabreTools.Library/DatFiles/ClrMamePro.cs @@ -34,6 +34,7 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; } diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index c163c2a6..4f87193f 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -42,6 +42,7 @@ namespace SabreTools.Library.DatFiles // DatItems dictionary internal SortedDictionary> _items = new SortedDictionary>(); internal SortedBy _sortedBy; + internal DedupeType _mergedBy; // Internal statistical data internal DatStats _datStats = new DatStats(); @@ -1395,7 +1396,7 @@ namespace SabreTools.Library.DatFiles // If the sorted type isn't the same, we want to sort the dictionary accordingly if (_sortedBy != bucketBy) { - Globals.Logger.User("Organizing roms by {0}" + (deduperoms != DedupeType.None ? " and merging" : ""), bucketBy); + Globals.Logger.User("Organizing roms by {0}", bucketBy); // Set the sorted type _sortedBy = bucketBy; @@ -1426,26 +1427,34 @@ namespace SabreTools.Library.DatFiles }); } - // Now go through and sort all of the individual lists - List keys = Keys; - Parallel.ForEach(keys, Globals.ParallelOptions, key => + // If the merge type isn't the same, we want to merge the dictionary accordingly + if (_mergedBy != deduperoms) { - // Get the possibly unsorted list - List sortedlist = this[key]; + Globals.Logger.User("Deduping roms by {0}", deduperoms); - // Sort the list of items to be consistent - DatItem.Sort(ref sortedlist, false); + // Set the sorted type + _mergedBy = deduperoms; - // If we're merging the roms, do so - if (deduperoms == DedupeType.Full || (deduperoms == DedupeType.Game && bucketBy == SortedBy.Game)) + List keys = Keys; + Parallel.ForEach(keys, Globals.ParallelOptions, key => { - sortedlist = DatItem.Merge(sortedlist); - } + // Get the possibly unsorted list + List sortedlist = this[key]; - // Add the list back to the dictionary - Remove(key); - AddRange(key, sortedlist); - }); + // Sort the list of items to be consistent + DatItem.Sort(ref sortedlist, false); + + // If we're merging the roms, do so + if (deduperoms == DedupeType.Full || (deduperoms == DedupeType.Game && bucketBy == SortedBy.Game)) + { + sortedlist = DatItem.Merge(sortedlist); + } + + // Add the list back to the dictionary + Remove(key); + AddRange(key, sortedlist); + }); + } } /// @@ -1607,13 +1616,11 @@ namespace SabreTools.Library.DatFiles baseFileNames.Reverse(); } - // Populate the combined data and get the headers - List datHeaders = PopulateUserData(inputFileNames, inplace, clean, - remUnicode, descAsName, outDir, filter, splitType); - // If we're in merging mode if ((updateMode & UpdateMode.Merge) != 0) { + // Populate the combined data and get the headers + List datHeaders = PopulateUserData(inputFileNames, inplace, clean, remUnicode, descAsName, outDir, filter, splitType); MergeNoDiff(outDir, inputFileNames, datHeaders); } // If we have one of the standard diffing modes @@ -1627,6 +1634,8 @@ namespace SabreTools.Library.DatFiles else if ((updateMode & UpdateMode.DiffCascade) != 0 || (updateMode & UpdateMode.DiffReverseCascade) != 0) { + // Populate the combined data and get the headers + List datHeaders = PopulateUserData(inputFileNames, inplace, clean, remUnicode, descAsName, outDir, filter, splitType); DiffCascade(outDir, inplace, inputFileNames, datHeaders, skip); } // If we have diff against mode @@ -1750,14 +1759,14 @@ namespace SabreTools.Library.DatFiles // Now we want to try to replace each item in each input DAT from the base foreach (string path in inputFileNames) { - Globals.Logger.User("Replacing items in '{0}'' from the base DAT", path.Split('¬')[0]); + Globals.Logger.User("Replacing items in '{0}' from the base DAT", path.Split('¬')[0]); // First we parse in the DAT internally DatFile intDat = new DatFile(); intDat.Parse(path, 1, 1, keep: true, clean: clean, remUnicode: remUnicode, descAsName: descAsName); // For comparison's sake, we want to use CRC as the base ordering - intDat.BucketBy(SortedBy.CRC, DedupeType.Full); + intDat.BucketBy(SortedBy.CRC, DedupeType.None); // Then we do a hashwise comparison against the base DAT List keys = intDat.Keys; diff --git a/SabreTools.Library/DatFiles/DosCenter.cs b/SabreTools.Library/DatFiles/DosCenter.cs index 834636e6..43ec7c7b 100644 --- a/SabreTools.Library/DatFiles/DosCenter.cs +++ b/SabreTools.Library/DatFiles/DosCenter.cs @@ -33,6 +33,7 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; } diff --git a/SabreTools.Library/DatFiles/Hashfile.cs b/SabreTools.Library/DatFiles/Hashfile.cs index 916e8777..ecf98116 100644 --- a/SabreTools.Library/DatFiles/Hashfile.cs +++ b/SabreTools.Library/DatFiles/Hashfile.cs @@ -37,6 +37,7 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; _hash = hash; } diff --git a/SabreTools.Library/DatFiles/Listroms.cs b/SabreTools.Library/DatFiles/Listroms.cs index dbe6a3c9..ea56ba2a 100644 --- a/SabreTools.Library/DatFiles/Listroms.cs +++ b/SabreTools.Library/DatFiles/Listroms.cs @@ -34,6 +34,7 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; } diff --git a/SabreTools.Library/DatFiles/Logiqx.cs b/SabreTools.Library/DatFiles/Logiqx.cs index 77ee76ed..4d49aec3 100644 --- a/SabreTools.Library/DatFiles/Logiqx.cs +++ b/SabreTools.Library/DatFiles/Logiqx.cs @@ -36,6 +36,7 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; } diff --git a/SabreTools.Library/DatFiles/Missfile.cs b/SabreTools.Library/DatFiles/Missfile.cs index dbcf6062..9a218265 100644 --- a/SabreTools.Library/DatFiles/Missfile.cs +++ b/SabreTools.Library/DatFiles/Missfile.cs @@ -32,6 +32,7 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; } diff --git a/SabreTools.Library/DatFiles/OfflineList.cs b/SabreTools.Library/DatFiles/OfflineList.cs index 3fcc48d0..7bb0064e 100644 --- a/SabreTools.Library/DatFiles/OfflineList.cs +++ b/SabreTools.Library/DatFiles/OfflineList.cs @@ -33,6 +33,7 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; } diff --git a/SabreTools.Library/DatFiles/RomCenter.cs b/SabreTools.Library/DatFiles/RomCenter.cs index d81f10a0..f625f66f 100644 --- a/SabreTools.Library/DatFiles/RomCenter.cs +++ b/SabreTools.Library/DatFiles/RomCenter.cs @@ -34,6 +34,7 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; } diff --git a/SabreTools.Library/DatFiles/SabreDat.cs b/SabreTools.Library/DatFiles/SabreDat.cs index 9ab23c41..1eb8b41b 100644 --- a/SabreTools.Library/DatFiles/SabreDat.cs +++ b/SabreTools.Library/DatFiles/SabreDat.cs @@ -34,6 +34,7 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; } diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs index 5645b8fb..cd919ff0 100644 --- a/SabreTools.Library/DatFiles/SeparatedValue.cs +++ b/SabreTools.Library/DatFiles/SeparatedValue.cs @@ -36,6 +36,7 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; _delim = delim; } diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs index 108db46f..7f447e11 100644 --- a/SabreTools.Library/DatFiles/SoftwareList.cs +++ b/SabreTools.Library/DatFiles/SoftwareList.cs @@ -33,8 +33,8 @@ namespace SabreTools.Library.DatFiles this._datHeader = datFile._datHeader; this._items = datFile._items; this._sortedBy = datFile._sortedBy; + this._mergedBy = datFile._mergedBy; this._datStats = datFile._datStats; - } /// diff --git a/SabreTools/SabreTools.cs b/SabreTools/SabreTools.cs index 01665cd2..da09b061 100644 --- a/SabreTools/SabreTools.cs +++ b/SabreTools/SabreTools.cs @@ -579,7 +579,11 @@ namespace SabreTools filter.MD5s.AddRange((List)feat.Value.GetValue()); break; case "mt": - Globals.MaxThreads = (int)feat.Value.GetValue() == Int32.MinValue ? (int)feat.Value.GetValue() : Globals.MaxThreads; + int val = (int)feat.Value.GetValue(); + if (val != Int32.MinValue) + { + Globals.MaxThreads = val; + } break; case "name": datHeader.Name = (string)feat.Value.GetValue();