diff --git a/SabreTools.DatTools/MergeSplit.cs b/SabreTools.DatTools/MergeSplit.cs index 01f981ec..5507ebf2 100644 --- a/SabreTools.DatTools/MergeSplit.cs +++ b/SabreTools.DatTools/MergeSplit.cs @@ -4,7 +4,7 @@ using System.IO; #if NET40_OR_GREATER || NETCOREAPP using System.Threading.Tasks; #endif -using SabreTools.Core.Tools; +using SabreTools.Core.Filter; using SabreTools.DatFiles; using SabreTools.DatItems; using SabreTools.IO; @@ -39,9 +39,10 @@ namespace SabreTools.DatTools /// /// Current DatFile object to run operations on /// True if DatFile tags override splitting, false otherwise + /// Optional FilterRunner to filter items on parse /// True if the error that is thrown should be thrown back to the caller, false otherwise /// True if the DatFile was split, false on error - public bool ApplySplitting(DatFile datFile, bool useTags, bool throwOnError = false) + public bool ApplySplitting(DatFile datFile, bool useTags, FilterRunner? filterRunner = null, bool throwOnError = false) { InternalStopwatch watch = new("Applying splitting to DAT"); @@ -59,17 +60,29 @@ namespace SabreTools.DatTools // No-op break; case MergingFlag.Split: + if (filterRunner != null) + datFile.ExecuteFilters(filterRunner); + datFile.ApplySplit(); break; case MergingFlag.Merged: + if (filterRunner != null) + datFile.ExecuteFilters(filterRunner); + datFile.ApplyMerged(); break; case MergingFlag.NonMerged: + if (filterRunner != null) + datFile.ExecuteFilters(filterRunner); + datFile.ApplyNonMerged(); break; // Nonstandard case MergingFlag.FullMerged: + if (filterRunner != null) + datFile.ExecuteFilters(filterRunner); + datFile.ApplyFullyMerged(); break; case MergingFlag.DeviceNonMerged: diff --git a/SabreTools/Features/Batch.cs b/SabreTools/Features/Batch.cs index 79f5c8af..ec07af3d 100644 --- a/SabreTools/Features/Batch.cs +++ b/SabreTools/Features/Batch.cs @@ -577,7 +577,7 @@ Reset the internal state: reset();"; // Apply the merging flag MergeSplit splitter = new() { SplitType = mergingFlag }; - splitter.ApplySplitting(batchState.DatFile, false, false); + splitter.ApplySplitting(batchState.DatFile, useTags: false, throwOnError: false); } } diff --git a/SabreTools/Features/DatFromDir.cs b/SabreTools/Features/DatFromDir.cs index 71929d25..7a52e309 100644 --- a/SabreTools/Features/DatFromDir.cs +++ b/SabreTools/Features/DatFromDir.cs @@ -101,7 +101,7 @@ namespace SabreTools.Features // Perform additional processing steps Extras!.ApplyExtras(datdata); Extras!.ApplyExtrasDB(datdata); - Splitter!.ApplySplitting(datdata, useTags: false); + Splitter!.ApplySplitting(datdata, useTags: false, filterRunner: FilterRunner); datdata.ExecuteFilters(FilterRunner!); Cleaner!.ApplyCleaning(datdata); Remover!.ApplyRemovals(datdata); diff --git a/SabreTools/Features/Update.cs b/SabreTools/Features/Update.cs index 6024908f..9fe8f234 100644 --- a/SabreTools/Features/Update.cs +++ b/SabreTools/Features/Update.cs @@ -537,7 +537,7 @@ namespace SabreTools.Features { Extras!.ApplyExtras(datFile); Extras!.ApplyExtrasDB(datFile); - Splitter!.ApplySplitting(datFile, useTags: false); + Splitter!.ApplySplitting(datFile, useTags: false, filterRunner: FilterRunner); datFile.ExecuteFilters(FilterRunner!); Cleaner!.ApplyCleaning(datFile); Remover!.ApplyRemovals(datFile); diff --git a/SabreTools/Features/Verify.cs b/SabreTools/Features/Verify.cs index 7db4da1d..bc7ea20c 100644 --- a/SabreTools/Features/Verify.cs +++ b/SabreTools/Features/Verify.cs @@ -72,7 +72,7 @@ namespace SabreTools.Features // Perform additional processing steps Extras!.ApplyExtras(datdata); Extras!.ApplyExtrasDB(datdata); - Splitter!.ApplySplitting(datdata, useTags: true); + Splitter!.ApplySplitting(datdata, useTags: true, filterRunner: FilterRunner); datdata.ExecuteFilters(FilterRunner!); Cleaner!.ApplyCleaning(datdata); Remover!.ApplyRemovals(datdata); @@ -128,7 +128,7 @@ namespace SabreTools.Features // Perform additional processing steps Extras!.ApplyExtras(datdata); Extras!.ApplyExtrasDB(datdata); - Splitter!.ApplySplitting(datdata, useTags: true); + Splitter!.ApplySplitting(datdata, useTags: true, filterRunner: FilterRunner); datdata.ExecuteFilters(FilterRunner!); Cleaner!.ApplyCleaning(datdata); Remover!.ApplyRemovals(datdata);