diff --git a/SabreTools.Filtering/Cleaner.cs b/SabreTools.Filtering/Cleaner.cs index 8074d3fe..efaa1564 100644 --- a/SabreTools.Filtering/Cleaner.cs +++ b/SabreTools.Filtering/Cleaner.cs @@ -1,5 +1,7 @@ using System; +#if NET40_OR_GREATER || NETCOREAPP using System.Collections.Concurrent; +#endif using System.Collections.Generic; using System.IO; using System.Linq; @@ -215,7 +217,7 @@ namespace SabreTools.Filtering if (datItem.GetName()!.Length > usableLength) { string ext = Path.GetExtension(datItem.GetName()!); - datItem.SetName(datItem.GetName()![..(usableLength - ext.Length)] + ext); + datItem.SetName(datItem.GetName()!.Substring(0, usableLength - ext.Length) + ext); } } } @@ -230,8 +232,13 @@ namespace SabreTools.Filtering try { // First we want to get a mapping for all games to description +#if NET40_OR_GREATER || NETCOREAPP ConcurrentDictionary concurrentDictionary = new(); ConcurrentDictionary mapping = concurrentDictionary; +#else + Dictionary concurrentDictionary = []; + Dictionary mapping = concurrentDictionary; +#endif #if NET452_OR_GREATER || NETCOREAPP Parallel.ForEach(datFile.Items.Keys, Globals.ParallelOptions, key => #elif NET40_OR_GREATER @@ -247,7 +254,11 @@ namespace SabreTools.Filtering foreach (DatItem item in items) { // If the key mapping doesn't exist, add it +#if NET40_OR_GREATER || NETCOREAPP mapping.TryAdd(item.Machine.Name!, item.Machine.Description!.Replace('/', '_').Replace("\"", "''").Replace(":", " -")); +#else + mapping[item.Machine.Name!] = item.Machine.Description!.Replace('/', '_').Replace("\"", "''").Replace(":", " -"); +#endif } #if NET40_OR_GREATER || NETCOREAPP }); @@ -272,20 +283,20 @@ namespace SabreTools.Filtering foreach (DatItem item in items) { // Update machine name - if (!string.IsNullOrWhiteSpace(item.Machine.Name) && mapping.ContainsKey(item.Machine.Name)) - item.Machine.Name = mapping[item.Machine.Name]; + if (!string.IsNullOrEmpty(item.Machine.Name) && mapping.ContainsKey(item.Machine.Name!)) + item.Machine.Name = mapping[item.Machine.Name!]; // Update cloneof - if (!string.IsNullOrWhiteSpace(item.Machine.CloneOf) && mapping.ContainsKey(item.Machine.CloneOf)) - item.Machine.CloneOf = mapping[item.Machine.CloneOf]; + if (!string.IsNullOrEmpty(item.Machine.CloneOf) && mapping.ContainsKey(item.Machine.CloneOf!)) + item.Machine.CloneOf = mapping[item.Machine.CloneOf!]; // Update romof - if (!string.IsNullOrWhiteSpace(item.Machine.RomOf) && mapping.ContainsKey(item.Machine.RomOf)) - item.Machine.RomOf = mapping[item.Machine.RomOf]; + if (!string.IsNullOrEmpty(item.Machine.RomOf) && mapping.ContainsKey(item.Machine.RomOf!)) + item.Machine.RomOf = mapping[item.Machine.RomOf!]; // Update sampleof - if (!string.IsNullOrWhiteSpace(item.Machine.SampleOf) && mapping.ContainsKey(item.Machine.SampleOf)) - item.Machine.SampleOf = mapping[item.Machine.SampleOf]; + if (!string.IsNullOrEmpty(item.Machine.SampleOf) && mapping.ContainsKey(item.Machine.SampleOf!)) + item.Machine.SampleOf = mapping[item.Machine.SampleOf!]; // Add the new item to the output list newItems.Add(item); @@ -337,7 +348,7 @@ namespace SabreTools.Filtering // Match on CloneOf first if (!string.IsNullOrEmpty(item.Machine.CloneOf)) { - if (!parents.ContainsKey(item.Machine.CloneOf.ToLowerInvariant())) + if (!parents.ContainsKey(item.Machine.CloneOf!.ToLowerInvariant())) parents.Add(item.Machine.CloneOf.ToLowerInvariant(), new List()); parents[item.Machine.CloneOf.ToLowerInvariant()].Add(item.Machine.Name!.ToLowerInvariant()); @@ -346,7 +357,7 @@ namespace SabreTools.Filtering // Then by RomOf else if (!string.IsNullOrEmpty(item.Machine.RomOf)) { - if (!parents.ContainsKey(item.Machine.RomOf.ToLowerInvariant())) + if (!parents.ContainsKey(item.Machine.RomOf!.ToLowerInvariant())) parents.Add(item.Machine.RomOf.ToLowerInvariant(), new List()); parents[item.Machine.RomOf.ToLowerInvariant()].Add(item.Machine.Name!.ToLowerInvariant()); @@ -356,7 +367,7 @@ namespace SabreTools.Filtering else { if (!parents.ContainsKey(item.Machine.Name!.ToLowerInvariant())) - parents.Add(item.Machine.Name.ToLowerInvariant(), new List()); + parents.Add(item.Machine.Name!.ToLowerInvariant(), new List()); parents[item.Machine.Name.ToLowerInvariant()].Add(item.Machine.Name.ToLowerInvariant()); } @@ -432,7 +443,11 @@ namespace SabreTools.Filtering return; string[] splitname = datItem.GetName()!.Split('.'); +#if NET20 || NET35 + datItem.Machine.Name += $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1).ToArray())}"; +#else datItem.Machine.Name += $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1))}"; +#endif datItem.SetName(Path.GetFileName(datItem.GetName())); } diff --git a/SabreTools.Filtering/DatHeaderRemover.cs b/SabreTools.Filtering/DatHeaderRemover.cs index c9046e34..0de49489 100644 --- a/SabreTools.Filtering/DatHeaderRemover.cs +++ b/SabreTools.Filtering/DatHeaderRemover.cs @@ -29,7 +29,7 @@ namespace SabreTools.Filtering public bool SetRemover(string field) { // If the key is null or empty, return false - if (string.IsNullOrWhiteSpace(field)) + if (string.IsNullOrEmpty(field)) return false; // If we have a DatHeader field diff --git a/SabreTools.Filtering/DatItemRemover.cs b/SabreTools.Filtering/DatItemRemover.cs index 0f3142b9..0d7e11e4 100644 --- a/SabreTools.Filtering/DatItemRemover.cs +++ b/SabreTools.Filtering/DatItemRemover.cs @@ -35,7 +35,7 @@ namespace SabreTools.Filtering public bool SetRemover(string field) { // If the key is null or empty, return false - if (string.IsNullOrWhiteSpace(field)) + if (string.IsNullOrEmpty(field)) return false; // If we have a Machine field diff --git a/SabreTools.Filtering/ExtraIni.cs b/SabreTools.Filtering/ExtraIni.cs index 1d6c8417..92532e5b 100644 --- a/SabreTools.Filtering/ExtraIni.cs +++ b/SabreTools.Filtering/ExtraIni.cs @@ -69,7 +69,7 @@ namespace SabreTools.Filtering string inputTrimmed = input.Trim('"', ' ', '\t'); string fieldString = inputTrimmed.Split(':')[0].ToLowerInvariant().Trim('"', ' ', '\t'); - string fileString = inputTrimmed[(fieldString.Length + 1)..].Trim('"', ' ', '\t'); + string fileString = inputTrimmed.Substring(fieldString.Length + 1).Trim('"', ' ', '\t'); item.DatItemField = fieldString.AsDatItemField(); item.MachineField = fieldString.AsMachineField(); diff --git a/SabreTools.Filtering/Filter.cs b/SabreTools.Filtering/Filter.cs index 8e1a5df7..779375a8 100644 --- a/SabreTools.Filtering/Filter.cs +++ b/SabreTools.Filtering/Filter.cs @@ -119,10 +119,10 @@ namespace SabreTools.Filtering || filterTrimmed.StartsWith("~") || filterTrimmed.StartsWith("not-"); filterTrimmed = filterTrimmed.TrimStart('!', '~'); - filterTrimmed = filterTrimmed.StartsWith("not-") ? filterTrimmed[4..] : filterTrimmed; + filterTrimmed = filterTrimmed.StartsWith("not-") ? filterTrimmed.Substring(4) : filterTrimmed; string filterFieldString = filterTrimmed.Split(':')[0].ToLowerInvariant().Trim('"', ' ', '\t'); - string filterValue = filterTrimmed[(filterFieldString.Length + 1)..].Trim('"', ' ', '\t'); + string filterValue = filterTrimmed.Substring(filterFieldString.Length + 1).Trim('"', ' ', '\t'); return (filterFieldString, filterValue, negate); } diff --git a/SabreTools.Filtering/FilterItem.cs b/SabreTools.Filtering/FilterItem.cs index ef76a5ce..b6331359 100644 --- a/SabreTools.Filtering/FilterItem.cs +++ b/SabreTools.Filtering/FilterItem.cs @@ -116,13 +116,13 @@ namespace SabreTools.Filtering if (single == null || single.Equals(def)) return null; - // If we have a flag #if NETFRAMEWORK - if (typeof(T).IsEnum && ((single as Enum)! & (value as Enum)!) != 0) + // TODO: Fix flag matching #else + // If we have a flag if (typeof(T).IsEnum && (single as Enum)!.HasFlag((value as Enum)!)) -#endif return true; +#endif return single.Equals(value); } @@ -157,7 +157,7 @@ namespace SabreTools.Filtering { if (straw is string strawString) { - if (!string.IsNullOrWhiteSpace(strawString) && needle is string needleString) + if (!string.IsNullOrEmpty(strawString) && needle is string needleString) { string regexStraw = strawString; diff --git a/SabreTools.Filtering/SabreTools.Filtering.csproj b/SabreTools.Filtering/SabreTools.Filtering.csproj index 6fcc8128..d3343258 100644 --- a/SabreTools.Filtering/SabreTools.Filtering.csproj +++ b/SabreTools.Filtering/SabreTools.Filtering.csproj @@ -1,10 +1,23 @@  - net6.0;net8.0 + + net20;net35;net40;net452;net462;net472;net48;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0 + win-x86;win-x64;win-arm64;linux-x64;linux-arm64;osx-x64 + false + false latest enable + true true + 1.1.2 + + + Matt Nadareski + Copyright (c)2016-2024 Matt Nadareski + https://github.com/SabreTools/ + https://github.com/SabreTools/SabreTools + git diff --git a/SabreTools.Filtering/Splitter.cs b/SabreTools.Filtering/Splitter.cs index c2a336d2..333d3f1b 100644 --- a/SabreTools.Filtering/Splitter.cs +++ b/SabreTools.Filtering/Splitter.cs @@ -246,20 +246,20 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrWhiteSpace(items[0].Machine.RomOf)) + if (!string.IsNullOrEmpty(items[0].Machine.RomOf)) parent = items[0].Machine.RomOf; // If the parent doesnt exist, we want to continue - if (string.IsNullOrWhiteSpace(parent)) + if (string.IsNullOrEmpty(parent)) continue; // If the parent doesn't have any items, we want to continue - if (datFile.Items[parent]!.Count == 0) + if (datFile.Items[parent!]!.Count == 0) continue; // If the parent exists and has items, we copy the items from the parent to the current game DatItem copyFrom = items[0]; - var parentItems = datFile.Items[parent]; + var parentItems = datFile.Items[parent!]; if (parentItems == null) continue; @@ -429,20 +429,20 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrWhiteSpace(items[0].Machine.CloneOf)) + if (!string.IsNullOrEmpty(items[0].Machine.CloneOf)) parent = items[0].Machine.CloneOf; // If the parent doesnt exist, we want to continue - if (string.IsNullOrWhiteSpace(parent)) + if (string.IsNullOrEmpty(parent)) continue; // If the parent doesn't have any items, we want to continue - if (datFile.Items[parent]!.Count == 0) + if (datFile.Items[parent!]!.Count == 0) continue; // If the parent exists and has items, we copy the items from the parent to the current game DatItem copyFrom = items[0]; - var parentItems = datFile.Items[parent]; + var parentItems = datFile.Items[parent!]; foreach (DatItem item in parentItems!) { DatItem datItem = (DatItem)item.Clone(); @@ -456,7 +456,7 @@ namespace SabreTools.Filtering // Now we want to get the parent romof tag and put it in each of the items items = datFile.Items[game]; - string? romof = datFile.Items[parent]![0].Machine.RomOf; + string? romof = datFile.Items[parent!]![0].Machine.RomOf; foreach (DatItem item in items!) { item.Machine.RomOf = romof; @@ -482,16 +482,16 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrWhiteSpace(items[0].Machine.CloneOf)) + if (!string.IsNullOrEmpty(items[0].Machine.CloneOf)) parent = items[0].Machine.CloneOf; // If there is no parent, then we continue - if (string.IsNullOrWhiteSpace(parent)) + if (string.IsNullOrEmpty(parent)) continue; // Otherwise, move the items from the current game to a subfolder of the parent game DatItem copyFrom; - if (datFile.Items[parent]!.Count == 0) + if (datFile.Items[parent!]!.Count == 0) { copyFrom = new Rom(); copyFrom.Machine.Name = parent; @@ -499,7 +499,7 @@ namespace SabreTools.Filtering } else { - copyFrom = datFile.Items[parent]![0]; + copyFrom = datFile.Items[parent!]![0]; } items = datFile.Items[game]; @@ -511,23 +511,23 @@ namespace SabreTools.Filtering Disk disk = (item as Disk)!; // If the merge tag exists and the parent already contains it, skip - if (disk.MergeTag != null && datFile.Items[parent]!.Where(i => i.ItemType == ItemType.Disk).Select(i => (i as Disk)!.Name).Contains(disk.MergeTag)) + if (disk.MergeTag != null && datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Disk).Select(i => (i as Disk)!.Name).Contains(disk.MergeTag)) { continue; } // If the merge tag exists but the parent doesn't contain it, add to parent - else if (disk.MergeTag != null && !datFile.Items[parent]!.Where(i => i.ItemType == ItemType.Disk).Select(i => (i as Disk)!.Name).Contains(disk.MergeTag)) + else if (disk.MergeTag != null && !datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Disk).Select(i => (i as Disk)!.Name).Contains(disk.MergeTag)) { disk.CopyMachineInformation(copyFrom); - datFile.Items.Add(parent, disk); + datFile.Items.Add(parent!, disk); } // If there is no merge tag, add to parent else if (disk.MergeTag == null) { disk.CopyMachineInformation(copyFrom); - datFile.Items.Add(parent, disk); + datFile.Items.Add(parent!, disk); } } @@ -537,40 +537,40 @@ namespace SabreTools.Filtering Rom rom = (item as Rom)!; // If the merge tag exists and the parent already contains it, skip - if (rom.MergeTag != null && datFile.Items[parent]!.Where(i => i.ItemType == ItemType.Rom).Select(i => (i as Rom)!.Name).Contains(rom.MergeTag)) + if (rom.MergeTag != null && datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Rom).Select(i => (i as Rom)!.Name).Contains(rom.MergeTag)) { continue; } // If the merge tag exists but the parent doesn't contain it, add to subfolder of parent - else if (rom.MergeTag != null && !datFile.Items[parent]!.Where(i => i.ItemType == ItemType.Rom).Select(i => (i as Rom)!.Name).Contains(rom.MergeTag)) + else if (rom.MergeTag != null && !datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Rom).Select(i => (i as Rom)!.Name).Contains(rom.MergeTag)) { if (subfolder) rom.Name = $"{rom.Machine.Name}\\{rom.Name}"; rom.CopyMachineInformation(copyFrom); - datFile.Items.Add(parent, rom); + datFile.Items.Add(parent!, rom); } // If the parent doesn't already contain this item, add to subfolder of parent - else if (!datFile.Items[parent]!.Contains(item) || skipDedup) + else if (!datFile.Items[parent!]!.Contains(item) || skipDedup) { if (subfolder) rom.Name = $"{item.Machine.Name}\\{rom.Name}"; rom.CopyMachineInformation(copyFrom); - datFile.Items.Add(parent, rom); + datFile.Items.Add(parent!, rom); } } // All other that would be missing to subfolder of parent - else if (!datFile.Items[parent]!.Contains(item)) + else if (!datFile.Items[parent!]!.Contains(item)) { if (subfolder) item.SetName($"{item.Machine.Name}\\{item.GetName()}"); item.CopyMachineInformation(copyFrom); - datFile.Items.Add(parent, item); + datFile.Items.Add(parent!, item); } } @@ -632,19 +632,19 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrWhiteSpace(items[0].Machine.RomOf)) + if (!string.IsNullOrEmpty(items[0].Machine.RomOf)) parent = items[0].Machine.RomOf; // If the parent doesnt exist, we want to continue - if (string.IsNullOrWhiteSpace(parent)) + if (string.IsNullOrEmpty(parent)) continue; // If the parent doesn't have any items, we want to continue - if (datFile.Items[parent]!.Count == 0) + if (datFile.Items[parent!]!.Count == 0) continue; // If the parent exists and has items, we remove the items that are in the parent from the current game - var parentItems = datFile.Items[parent]; + var parentItems = datFile.Items[parent!]; if (parentItems == null) continue; @@ -678,19 +678,19 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrWhiteSpace(items[0].Machine.CloneOf)) + if (!string.IsNullOrEmpty(items[0].Machine.CloneOf)) parent = items[0].Machine.CloneOf; // If the parent doesnt exist, we want to continue - if (string.IsNullOrWhiteSpace(parent)) + if (string.IsNullOrEmpty(parent)) continue; // If the parent doesn't have any items, we want to continue - if (datFile.Items[parent] == null || datFile.Items[parent]!.Count == 0) + if (datFile.Items[parent!] == null || datFile.Items[parent!]!.Count == 0) continue; // If the parent exists and has items, we remove the parent items from the current game - var parentItems = datFile.Items[parent]; + var parentItems = datFile.Items[parent!]; foreach (DatItem item in parentItems!) { DatItem datItem = (DatItem)item.Clone(); @@ -702,7 +702,7 @@ namespace SabreTools.Filtering // Now we want to get the parent romof tag and put it in each of the remaining items items = datFile.Items[game]; - string? romof = datFile.Items[parent]![0].Machine.RomOf; + string? romof = datFile.Items[parent!]![0].Machine.RomOf; foreach (DatItem item in items!) { item.Machine.RomOf = romof;