diff --git a/SabreTools.Core/Tools/Converters.cs b/SabreTools.Core/Tools/Converters.cs index bb4c10bd..1e08106e 100644 --- a/SabreTools.Core/Tools/Converters.cs +++ b/SabreTools.Core/Tools/Converters.cs @@ -1727,9 +1727,9 @@ namespace SabreTools.Core.Tools { return supported switch { - Supported.No => "no", + Supported.No => verbose ? "unsupported" : "no", Supported.Partial => "partial", - Supported.Yes => "yes", + Supported.Yes => verbose ? "supported" : "yes", _ => null, }; } diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs index f95839bc..b3077741 100644 --- a/SabreTools.DatFiles/DatFile.cs +++ b/SabreTools.DatFiles/DatFile.cs @@ -70,88 +70,37 @@ namespace SabreTools.DatFiles /// DatFile of the specific internal type that corresponds to the inputs public static DatFile Create(DatFormat? datFormat = null, DatFile baseDat = null, bool quotes = true) { - switch (datFormat) + return datFormat switch { - case DatFormat.AttractMode: - return new AttractMode(baseDat); - - case DatFormat.ClrMamePro: - return new ClrMamePro(baseDat, quotes); - - case DatFormat.CSV: - return new Formats.SeparatedValue(baseDat, ','); - - case DatFormat.DOSCenter: - return new DosCenter(baseDat); - - case DatFormat.EverdriveSMDB: - return new EverdriveSMDB(baseDat); - - case DatFormat.Listrom: - return new Listrom(baseDat); - - case DatFormat.Listxml: - return new Listxml(baseDat); - - case DatFormat.Logiqx: - return new Logiqx(baseDat, false); - - case DatFormat.LogiqxDeprecated: - return new Logiqx(baseDat, true); - - case DatFormat.MissFile: - return new Missfile(baseDat); - - case DatFormat.OfflineList: - return new OfflineList(baseDat); - - case DatFormat.OpenMSX: - return new OpenMSX(baseDat); - - case DatFormat.RedumpMD5: - return new Hashfile(baseDat, Hash.MD5); - - case DatFormat.RedumpSFV: - return new Hashfile(baseDat, Hash.CRC); - - case DatFormat.RedumpSHA1: - return new Hashfile(baseDat, Hash.SHA1); - - case DatFormat.RedumpSHA256: - return new Hashfile(baseDat, Hash.SHA256); - - case DatFormat.RedumpSHA384: - return new Hashfile(baseDat, Hash.SHA384); - - case DatFormat.RedumpSHA512: - return new Hashfile(baseDat, Hash.SHA512); - - case DatFormat.RedumpSpamSum: - return new Hashfile(baseDat, Hash.SpamSum); - - case DatFormat.RomCenter: - return new RomCenter(baseDat); - - case DatFormat.SabreJSON: - return new SabreJSON(baseDat); - - case DatFormat.SabreXML: - return new SabreXML(baseDat); - - case DatFormat.SoftwareList: - return new Formats.SoftwareList(baseDat); - - case DatFormat.SSV: - return new Formats.SeparatedValue(baseDat, ';'); - - case DatFormat.TSV: - return new Formats.SeparatedValue(baseDat, '\t'); - + DatFormat.AttractMode => new AttractMode(baseDat), + DatFormat.ClrMamePro => new ClrMamePro(baseDat, quotes), + DatFormat.CSV => new SeparatedValue(baseDat, ','), + DatFormat.DOSCenter => new DosCenter(baseDat), + DatFormat.EverdriveSMDB => new EverdriveSMDB(baseDat), + DatFormat.Listrom => new Listrom(baseDat), + DatFormat.Listxml => new Listxml(baseDat), + DatFormat.Logiqx => new Logiqx(baseDat, false), + DatFormat.LogiqxDeprecated => new Logiqx(baseDat, true), + DatFormat.MissFile => new Missfile(baseDat), + DatFormat.OfflineList => new OfflineList(baseDat), + DatFormat.OpenMSX => new OpenMSX(baseDat), + DatFormat.RedumpMD5 => new Hashfile(baseDat, Hash.MD5), + DatFormat.RedumpSFV => new Hashfile(baseDat, Hash.CRC), + DatFormat.RedumpSHA1 => new Hashfile(baseDat, Hash.SHA1), + DatFormat.RedumpSHA256 => new Hashfile(baseDat, Hash.SHA256), + DatFormat.RedumpSHA384 => new Hashfile(baseDat, Hash.SHA384), + DatFormat.RedumpSHA512 => new Hashfile(baseDat, Hash.SHA512), + DatFormat.RedumpSpamSum => new Hashfile(baseDat, Hash.SpamSum), + DatFormat.RomCenter => new RomCenter(baseDat), + DatFormat.SabreJSON => new SabreJSON(baseDat), + DatFormat.SabreXML => new SabreXML(baseDat), + DatFormat.SoftwareList => new Formats.SoftwareList(baseDat), + DatFormat.SSV => new SeparatedValue(baseDat, ';'), + DatFormat.TSV => new SeparatedValue(baseDat, '\t'), + // We use new-style Logiqx as a backup for generic DatFile - case null: - default: - return new Logiqx(baseDat, false); - } + _ => new Logiqx(baseDat, false), + }; } /// @@ -213,7 +162,7 @@ namespace SabreTools.DatFiles /// The key for the item protected string ParseAddHelper(DatItem item) { - string key = string.Empty; + string key; // If we have a Disk, Media, or Rom, clean the hash data if (item.ItemType == ItemType.Disk) @@ -344,7 +293,7 @@ namespace SabreTools.DatFiles protected string CreatePrefixPostfix(DatItem item, bool prefix) { // Initialize strings - string fix = string.Empty, + string fix, game = item.Machine.Name, name = item.GetName() ?? item.ItemType.ToString(), crc = string.Empty, diff --git a/SabreTools.DatFiles/Formats/EverdriveSmdb.cs b/SabreTools.DatFiles/Formats/EverdriveSmdb.cs index 739172f6..1a0317ef 100644 --- a/SabreTools.DatFiles/Formats/EverdriveSmdb.cs +++ b/SabreTools.DatFiles/Formats/EverdriveSmdb.cs @@ -69,7 +69,7 @@ namespace SabreTools.DatFiles.Formats Rom rom = new Rom { - Name = svr.Line[1].Substring(fullname[0].Length + 1), + Name = svr.Line[1][(fullname[0].Length + 1)..], Size = null, // No size provided, but we don't want the size being 0 CRC = svr.Line[4], MD5 = svr.Line[3], diff --git a/SabreTools.DatFiles/Formats/Hashfile.cs b/SabreTools.DatFiles/Formats/Hashfile.cs index f22dd9da..f03d97b5 100644 --- a/SabreTools.DatFiles/Formats/Hashfile.cs +++ b/SabreTools.DatFiles/Formats/Hashfile.cs @@ -222,7 +222,7 @@ namespace SabreTools.DatFiles.Formats } // Get the hash field and set final fields - string hash = string.Empty; + string hash; switch (_hash) { case Hash.CRC: diff --git a/SabreTools.DatFiles/Formats/Listrom.cs b/SabreTools.DatFiles/Formats/Listrom.cs index 37386791..e8f19bf2 100644 --- a/SabreTools.DatFiles/Formats/Listrom.cs +++ b/SabreTools.DatFiles/Formats/Listrom.cs @@ -93,7 +93,7 @@ namespace SabreTools.DatFiles.Formats logger.Warning($"Possibly malformed line: '{line}'"); string romname = split[0]; - line = line.Substring(romname.Length); + line = line[romname.Length..]; // Next we separate the ROM into pieces split = line.Split(new char[0], StringSplitOptions.RemoveEmptyEntries); diff --git a/SabreTools.DatFiles/Formats/Logiqx.cs b/SabreTools.DatFiles/Formats/Logiqx.cs index 656e5463..7cd3967f 100644 --- a/SabreTools.DatFiles/Formats/Logiqx.cs +++ b/SabreTools.DatFiles/Formats/Logiqx.cs @@ -398,8 +398,6 @@ namespace SabreTools.DatFiles.Formats // Otherwise, add what is possible reader.MoveToContent(); - string key = string.Empty; - string temptype = reader.Name; bool containsItems = false; // Create a new machine @@ -497,7 +495,7 @@ namespace SabreTools.DatFiles.Formats archive.CopyMachineInformation(machine); // Now process and add the archive - key = ParseAddHelper(archive); + ParseAddHelper(archive); reader.Read(); break; @@ -521,7 +519,7 @@ namespace SabreTools.DatFiles.Formats biosSet.CopyMachineInformation(machine); // Now process and add the biosSet - key = ParseAddHelper(biosSet); + ParseAddHelper(biosSet); reader.Read(); break; @@ -547,7 +545,7 @@ namespace SabreTools.DatFiles.Formats disk.CopyMachineInformation(machine); // Now process and add the disk - key = ParseAddHelper(disk); + ParseAddHelper(disk); reader.Read(); break; @@ -573,7 +571,7 @@ namespace SabreTools.DatFiles.Formats media.CopyMachineInformation(machine); // Now process and add the media - key = ParseAddHelper(media); + ParseAddHelper(media); reader.Read(); break; @@ -593,7 +591,7 @@ namespace SabreTools.DatFiles.Formats release.CopyMachineInformation(machine); // Now process and add the release - key = ParseAddHelper(release); + ParseAddHelper(release); reader.Read(); break; @@ -627,7 +625,7 @@ namespace SabreTools.DatFiles.Formats rom.CopyMachineInformation(machine); // Now process and add the rom - key = ParseAddHelper(rom); + ParseAddHelper(rom); reader.Read(); break; @@ -649,7 +647,7 @@ namespace SabreTools.DatFiles.Formats sample.CopyMachineInformation(machine); // Now process and add the sample - key = ParseAddHelper(sample); + ParseAddHelper(sample); reader.Read(); break; diff --git a/SabreTools.DatFiles/Formats/SabreJSON.cs b/SabreTools.DatFiles/Formats/SabreJSON.cs index 1235a236..1c0cd99b 100644 --- a/SabreTools.DatFiles/Formats/SabreJSON.cs +++ b/SabreTools.DatFiles/Formats/SabreJSON.cs @@ -536,7 +536,7 @@ namespace SabreTools.DatFiles.Formats return base.CreateProperties(type, memberSerialization) .OrderBy(p => BaseTypesAndSelf(p.DeclaringType).Count()).ToList(); - IEnumerable BaseTypesAndSelf(Type t) + static IEnumerable BaseTypesAndSelf(Type t) { while (t != null) { diff --git a/SabreTools.DatFiles/ItemDictionary.cs b/SabreTools.DatFiles/ItemDictionary.cs index c8466a1b..f6ee638b 100644 --- a/SabreTools.DatFiles/ItemDictionary.cs +++ b/SabreTools.DatFiles/ItemDictionary.cs @@ -34,7 +34,7 @@ namespace SabreTools.DatFiles /// /// Internal dictionary for the class /// - private ConcurrentDictionary> items; + private readonly ConcurrentDictionary> items; /// /// Lock for statistics calculation @@ -44,12 +44,7 @@ namespace SabreTools.DatFiles /// /// Logging object /// - private Logger logger; - - /// - /// Static logger for static methods - /// - private static Logger staticLogger = new Logger(); + private readonly Logger logger; #endregion diff --git a/SabreTools.DatItems/Disk.cs b/SabreTools.DatItems/Disk.cs index 7a0c9109..34d3f1bd 100644 --- a/SabreTools.DatItems/Disk.cs +++ b/SabreTools.DatItems/Disk.cs @@ -370,7 +370,7 @@ namespace SabreTools.DatItems public override string GetKey(ItemKey bucketedBy, bool lower = true, bool norename = true) { // Set the output key as the default blank string - string key = string.Empty; + string key; // Now determine what the key should be based on the bucketedBy value switch (bucketedBy) diff --git a/SabreTools.DatItems/Media.cs b/SabreTools.DatItems/Media.cs index 700f61b1..63784be0 100644 --- a/SabreTools.DatItems/Media.cs +++ b/SabreTools.DatItems/Media.cs @@ -293,7 +293,7 @@ namespace SabreTools.DatItems public override string GetKey(ItemKey bucketedBy, bool lower = true, bool norename = true) { // Set the output key as the default blank string - string key = string.Empty; + string key; // Now determine what the key should be based on the bucketedBy value switch (bucketedBy) diff --git a/SabreTools.DatItems/Rom.cs b/SabreTools.DatItems/Rom.cs index d74b4737..60f6cda1 100644 --- a/SabreTools.DatItems/Rom.cs +++ b/SabreTools.DatItems/Rom.cs @@ -629,7 +629,7 @@ namespace SabreTools.DatItems public override string GetKey(ItemKey bucketedBy, bool lower = true, bool norename = true) { // Set the output key as the default blank string - string key = string.Empty; + string key; // Now determine what the key should be based on the bucketedBy value switch (bucketedBy) diff --git a/SabreTools.DatTools/DatFromDir.cs b/SabreTools.DatTools/DatFromDir.cs index 361a16ee..de1cbe32 100644 --- a/SabreTools.DatTools/DatFromDir.cs +++ b/SabreTools.DatTools/DatFromDir.cs @@ -415,22 +415,22 @@ namespace SabreTools.DatTools // If we have a Disk, then the ".chd" extension needs to be removed if (datItem.ItemType == ItemType.Disk && itemName.EndsWith(".chd")) { - itemName = itemName.Substring(0, itemName.Length - 4); + itemName = itemName[0..^4]; } // If we have a Media, then the extension needs to be removed else if (datItem.ItemType == ItemType.Media) { if (itemName.EndsWith(".dicf")) - itemName = itemName.Substring(0, itemName.Length - 5); + itemName = itemName[0..^5]; else if (itemName.EndsWith(".aaru")) - itemName = itemName.Substring(0, itemName.Length - 5); + itemName = itemName[0..^5]; else if (itemName.EndsWith(".aaruformat")) - itemName = itemName.Substring(0, itemName.Length - 11); + itemName = itemName[0..^11]; else if (itemName.EndsWith(".aaruf")) - itemName = itemName.Substring(0, itemName.Length - 6); + itemName = itemName[0..^6]; else if (itemName.EndsWith(".aif")) - itemName = itemName.Substring(0, itemName.Length - 4); + itemName = itemName[0..^4]; } // Set the item name back diff --git a/SabreTools.DatTools/Parser.cs b/SabreTools.DatTools/Parser.cs index ad18201a..04621e39 100644 --- a/SabreTools.DatTools/Parser.cs +++ b/SabreTools.DatTools/Parser.cs @@ -158,23 +158,21 @@ namespace SabreTools.DatTools try { - using (StreamReader sr = File.OpenText(filename)) + using StreamReader sr = File.OpenText(filename); + first = sr.ReadLine().ToLowerInvariant(); + while ((string.IsNullOrWhiteSpace(first) || first.StartsWith("