From b99ca8b496a4a8d115db9d8fec839158f87844ab Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 19 Mar 2024 16:22:19 -0400 Subject: [PATCH] Move StripSceneDatesFromItems to dictionaries --- SabreTools.DatFiles/ItemDictionary.cs | 50 ++++++++++++++++++++++++- SabreTools.DatFiles/ItemDictionaryDB.cs | 49 +++++++++++++++++++++++- SabreTools.Filtering/Cleaner.cs | 41 +------------------- 3 files changed, 99 insertions(+), 41 deletions(-) diff --git a/SabreTools.DatFiles/ItemDictionary.cs b/SabreTools.DatFiles/ItemDictionary.cs index 1d86b603..0c90938f 100644 --- a/SabreTools.DatFiles/ItemDictionary.cs +++ b/SabreTools.DatFiles/ItemDictionary.cs @@ -6,6 +6,8 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text.RegularExpressions; + #if NET40_OR_GREATER || NETCOREAPP using System.Threading.Tasks; #endif @@ -988,11 +990,57 @@ namespace SabreTools.DatFiles #endif } + /// + /// Strip the dates from the beginning of scene-style set names + /// + public void StripSceneDatesFromItems() + { + // Set the regex pattern to use + string pattern = @"([0-9]{2}\.[0-9]{2}\.[0-9]{2}-)(.*?-.*?)"; + + // Now process all of the roms +#if NET452_OR_GREATER || NETCOREAPP + Parallel.ForEach(Keys, Globals.ParallelOptions, key => +#elif NET40_OR_GREATER + Parallel.ForEach(Keys, key => +#else + foreach (var key in Keys) +#endif + { + var items = this[key]; + if (items == null) +#if NET40_OR_GREATER || NETCOREAPP + return; +#else + continue; +#endif + + for (int j = 0; j < items.Count; j++) + { + DatItem item = items[j]; + if (Regex.IsMatch(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!, pattern)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Regex.Replace(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!, pattern, "$2")); + + if (Regex.IsMatch(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Regex.Replace(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern, "$2")); + + items[j] = item; + } + + Remove(key); + AddRange(key, items); +#if NET40_OR_GREATER || NETCOREAPP + }); +#else + } +#endif + } + /// /// Set internal names to match One Rom Per Game (ORPG) logic /// /// DatItem to run logic on - internal static void SetOneRomPerGame(DatItem datItem) + private void SetOneRomPerGame(DatItem datItem) { if (datItem.GetName() == null) return; diff --git a/SabreTools.DatFiles/ItemDictionaryDB.cs b/SabreTools.DatFiles/ItemDictionaryDB.cs index c285669e..036f2831 100644 --- a/SabreTools.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.DatFiles/ItemDictionaryDB.cs @@ -5,6 +5,8 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text.RegularExpressions; + #if NET40_OR_GREATER || NETCOREAPP using System.Threading.Tasks; #endif @@ -1050,6 +1052,51 @@ namespace SabreTools.DatFiles #endif } + /// + /// Strip the dates from the beginning of scene-style set names + /// + public void StripSceneDatesFromItems() + { + // Set the regex pattern to use + string pattern = @"([0-9]{2}\.[0-9]{2}\.[0-9]{2}-)(.*?-.*?)"; + + // Now process all of the roms +#if NET452_OR_GREATER || NETCOREAPP + Parallel.ForEach(SortedKeys, Globals.ParallelOptions, key => +#elif NET40_OR_GREATER + Parallel.ForEach(SortedKeys, key => +#else + foreach (var key in SortedKeys) +#endif + { + var items = GetDatItemsForBucket(key); + if (items == null) +#if NET40_OR_GREATER || NETCOREAPP + return; +#else + continue; +#endif + + for (int j = 0; j < items.Length; j++) + { + (long, DatItem) item = items[j]; + if (Regex.IsMatch(item.Item2.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!, pattern)) + item.Item2.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Regex.Replace(item.Item2.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!, pattern, "$2")); + + if (Regex.IsMatch(item.Item2.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern)) + item.Item2.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Regex.Replace(item.Item2.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern, "$2")); + + items[j] = item; + } + + _buckets[key] = items.Select(i => i.Item1).ToConcurrentList(); +#if NET40_OR_GREATER || NETCOREAPP + }); +#else + } +#endif + } + /// /// Execute all filters in a filter runner on a single bucket /// @@ -1077,7 +1124,7 @@ namespace SabreTools.DatFiles /// Set internal names to match One Rom Per Game (ORPG) logic /// /// DatItem to run logic on - internal static void SetOneRomPerGame((long, DatItem) datItem) + private void SetOneRomPerGame((long, DatItem) datItem) { if (datItem.Item1 < 0 || datItem.Item2.GetName() == null) return; diff --git a/SabreTools.Filtering/Cleaner.cs b/SabreTools.Filtering/Cleaner.cs index b96ba060..711b8ec0 100644 --- a/SabreTools.Filtering/Cleaner.cs +++ b/SabreTools.Filtering/Cleaner.cs @@ -354,45 +354,8 @@ namespace SabreTools.Filtering // Output the logging statement logger.User("Stripping scene-style dates"); - // Set the regex pattern to use - string pattern = @"([0-9]{2}\.[0-9]{2}\.[0-9]{2}-)(.*?-.*?)"; - - // Now process all of the roms -#if NET452_OR_GREATER || NETCOREAPP - Parallel.ForEach(datFile.Items.Keys, Globals.ParallelOptions, key => -#elif NET40_OR_GREATER - Parallel.ForEach(datFile.Items.Keys, key => -#else - foreach (var key in datFile.Items.Keys) -#endif - { - var items = datFile.Items[key]; - if (items == null) -#if NET40_OR_GREATER || NETCOREAPP - return; -#else - continue; -#endif - - for (int j = 0; j < items.Count; j++) - { - DatItem item = items[j]; - if (Regex.IsMatch(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!, pattern)) - item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Regex.Replace(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!, pattern, "$2")); - - if (Regex.IsMatch(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern)) - item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Regex.Replace(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern, "$2")); - - items[j] = item; - } - - datFile.Items.Remove(key); - datFile.Items.AddRange(key, items); -#if NET40_OR_GREATER || NETCOREAPP - }); -#else - } -#endif + datFile.Items.StripSceneDatesFromItems(); + datFile.ItemsDB.StripSceneDatesFromItems(); } #endregion