diff --git a/SabreTools.Library/DatFiles/ClrMamePro.cs b/SabreTools.Library/DatFiles/ClrMamePro.cs index 143ddbd4..c7417f5b 100644 --- a/SabreTools.Library/DatFiles/ClrMamePro.cs +++ b/SabreTools.Library/DatFiles/ClrMamePro.cs @@ -898,8 +898,7 @@ namespace SabreTools.Library.DatFiles string state = ""; // Pre-process the item name - rom.Name = CreatePrefixPostfix(rom, true) + (GameName ? Path.Combine(rom.MachineName, rom.Name) : rom.Name) + CreatePrefixPostfix(rom, false); - rom.Name = rom.Name.Replace("\"", ""); // Quotes are not needed here + ProcessItemName(rom, true); switch (rom.Type) { diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index 55ed55a0..2f96ba2b 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -587,6 +587,90 @@ namespace SabreTools.Library.DatFiles _datHeader.Postfix = value; } } + public string AddExtension + { + get + { + if (_datHeader == null) + { + _datHeader = new DatHeader(); + } + + return _datHeader.AddExtension; + } + set + { + if (_datHeader == null) + { + _datHeader = new DatHeader(); + } + + _datHeader.AddExtension = value; + } + } + public string ReplaceExtension + { + get + { + if (_datHeader == null) + { + _datHeader = new DatHeader(); + } + + return _datHeader.ReplaceExtension; + } + set + { + if (_datHeader == null) + { + _datHeader = new DatHeader(); + } + + _datHeader.ReplaceExtension = value; + } + } + public bool RemoveExtension + { + get + { + if (_datHeader == null) + { + _datHeader = new DatHeader(); + } + + return _datHeader.RemoveExtension; + } + set + { + if (_datHeader == null) + { + _datHeader = new DatHeader(); + } + + _datHeader.RemoveExtension = value; + } + } + public bool Romba + { + get + { + if (_datHeader == null) + { + _datHeader = new DatHeader(); + } + + return _datHeader.Romba; + } + set + { + if (_datHeader == null) + { + _datHeader = new DatHeader(); + } + + _datHeader.Romba = value; + } + } public bool GameName { get @@ -652,90 +736,6 @@ namespace SabreTools.Library.DatFiles _datHeader.UseRomName = value; } } - public string ReplaceExtension - { - get - { - if (_datHeader == null) - { - _datHeader = new DatHeader(); - } - - return _datHeader.ReplaceExtension; - } - set - { - if (_datHeader == null) - { - _datHeader = new DatHeader(); - } - - _datHeader.ReplaceExtension = value; - } - } - public string AddExtension - { - get - { - if (_datHeader == null) - { - _datHeader = new DatHeader(); - } - - return _datHeader.AddExtension; - } - set - { - if (_datHeader == null) - { - _datHeader = new DatHeader(); - } - - _datHeader.AddExtension = value; - } - } - public bool RemoveExtension - { - get - { - if (_datHeader == null) - { - _datHeader = new DatHeader(); - } - - return _datHeader.RemoveExtension; - } - set - { - if (_datHeader == null) - { - _datHeader = new DatHeader(); - } - - _datHeader.RemoveExtension = value; - } - } - public bool Romba - { - get - { - if (_datHeader == null) - { - _datHeader = new DatHeader(); - } - - return _datHeader.Romba; - } - set - { - if (_datHeader == null) - { - _datHeader = new DatHeader(); - } - - _datHeader.Romba = value; - } - } // Statistical data related to the DAT public StatReportFormat ReportFormat @@ -5896,6 +5896,100 @@ namespace SabreTools.Library.DatFiles return outfile; } + /// + /// Process an item and correctly set the item name + /// + /// DatItem to update + /// True if the Quotes flag should be ignored, false otherwise + /// True if the UseRomName should be always on (default), false otherwise + protected void ProcessItemName(DatItem item, bool removeQuotes, bool alwaysRomName = true) + { + string name = item.Name; + + // Backup relevant values and set new ones accordingly + bool quotesBackup = Quotes; + bool useRomNameBackup = UseRomName; + if (removeQuotes) + { + Quotes = false; + } + if (alwaysRomName) + { + UseRomName = true; + } + + // Create the proper Prefix and Postfix + string pre = CreatePrefixPostfix(item, true); + string post = CreatePrefixPostfix(item, false); + + // If we're in Romba mode, take care of that instead + if (Romba) + { + if (item.Type == ItemType.Rom) + { + // We can only write out if there's a SHA-1 + if (!String.IsNullOrWhiteSpace(((Rom)item).SHA1)) + { + name = ((Rom)item).SHA1.Substring(0, 2) + + "/" + ((Rom)item).SHA1.Substring(2, 2) + + "/" + ((Rom)item).SHA1.Substring(4, 2) + + "/" + ((Rom)item).SHA1.Substring(6, 2) + + "/" + ((Rom)item).SHA1 + ".gz"; + item.Name = pre + name + post; + } + } + else if (item.Type == ItemType.Disk) + { + // We can only write out if there's a SHA-1 + if (!String.IsNullOrWhiteSpace(((Disk)item).SHA1)) + { + name = ((Disk)item).SHA1.Substring(0, 2) + + "/" + ((Disk)item).SHA1.Substring(2, 2) + + "/" + ((Disk)item).SHA1.Substring(4, 2) + + "/" + ((Disk)item).SHA1.Substring(6, 2) + + "/" + ((Disk)item).SHA1 + ".gz"; + item.Name = pre + name + post; + } + } + + return; + } + + if (!String.IsNullOrWhiteSpace(ReplaceExtension) || RemoveExtension) + { + if (RemoveExtension) + { + ReplaceExtension = ""; + } + + string dir = Path.GetDirectoryName(name); + dir = (dir.StartsWith(Path.DirectorySeparatorChar.ToString()) ? dir.Remove(0, 1) : dir); + name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + ReplaceExtension); + } + if (!String.IsNullOrWhiteSpace(AddExtension)) + { + name += AddExtension; + } + + if (UseRomName && GameName) + { + name = Path.Combine(item.MachineName, name); + } + + // Now assign back the item name + item.Name = pre + name + post; + + // Restore all relevant values + if (removeQuotes) + { + Quotes = quotesBackup; + } + if (alwaysRomName) + { + UseRomName = useRomNameBackup; + } + } + /// /// Create a prefix or postfix from inputs /// diff --git a/SabreTools.Library/DatFiles/DosCenter.cs b/SabreTools.Library/DatFiles/DosCenter.cs index 953908fc..cb1a63a9 100644 --- a/SabreTools.Library/DatFiles/DosCenter.cs +++ b/SabreTools.Library/DatFiles/DosCenter.cs @@ -271,8 +271,7 @@ namespace SabreTools.Library.DatFiles string state = ""; // Pre-process the item name - rom.Name = CreatePrefixPostfix(rom, true) + (GameName ? Path.Combine(rom.MachineName, rom.Name) : rom.Name) + CreatePrefixPostfix(rom, false); - rom.Name = rom.Name.Replace("\"", ""); // Quotes are not needed here + ProcessItemName(rom, true); switch (rom.Type) { diff --git a/SabreTools.Library/DatFiles/Hashfile.cs b/SabreTools.Library/DatFiles/Hashfile.cs index 563b2262..cc9a8bd6 100644 --- a/SabreTools.Library/DatFiles/Hashfile.cs +++ b/SabreTools.Library/DatFiles/Hashfile.cs @@ -201,8 +201,7 @@ namespace SabreTools.Library.DatFiles string state = ""; // Pre-process the item name - rom.Name = CreatePrefixPostfix(rom, true) + (GameName ? Path.Combine(rom.MachineName, rom.Name) : rom.Name) + CreatePrefixPostfix(rom, false); - rom.Name = rom.Name.Replace("\"", ""); // Quotes are not needed here + ProcessItemName(rom, true); switch (_hash) { diff --git a/SabreTools.Library/DatFiles/Listrom.cs b/SabreTools.Library/DatFiles/Listrom.cs index 939fff45..417576c8 100644 --- a/SabreTools.Library/DatFiles/Listrom.cs +++ b/SabreTools.Library/DatFiles/Listrom.cs @@ -410,8 +410,7 @@ namespace SabreTools.Library.DatFiles string state = ""; // Pre-process the item name - rom.Name = CreatePrefixPostfix(rom, true) + (GameName ? Path.Combine(rom.MachineName, rom.Name) : rom.Name) + CreatePrefixPostfix(rom, false); - rom.Name = rom.Name.Replace("\"", ""); // Quotes are not needed here + ProcessItemName(rom, true); switch (rom.Type) { diff --git a/SabreTools.Library/DatFiles/Listxml.cs b/SabreTools.Library/DatFiles/Listxml.cs index a2129271..26354f91 100644 --- a/SabreTools.Library/DatFiles/Listxml.cs +++ b/SabreTools.Library/DatFiles/Listxml.cs @@ -783,8 +783,7 @@ namespace SabreTools.Library.DatFiles string state = ""; // Pre-process the item name - rom.Name = CreatePrefixPostfix(rom, true) + (GameName ? Path.Combine(rom.MachineName, rom.Name) : rom.Name) + CreatePrefixPostfix(rom, false); - rom.Name = rom.Name.Replace("\"", ""); // Quotes are not needed here + ProcessItemName(rom, true); switch (rom.Type) { diff --git a/SabreTools.Library/DatFiles/Logiqx.cs b/SabreTools.Library/DatFiles/Logiqx.cs index d175d7b1..e097b31e 100644 --- a/SabreTools.Library/DatFiles/Logiqx.cs +++ b/SabreTools.Library/DatFiles/Logiqx.cs @@ -892,8 +892,7 @@ namespace SabreTools.Library.DatFiles string state = ""; // Pre-process the item name - rom.Name = CreatePrefixPostfix(rom, true) + (GameName ? Path.Combine(rom.MachineName, rom.Name) : rom.Name) + CreatePrefixPostfix(rom, false); - rom.Name = rom.Name.Replace("\"", ""); // Quotes are not needed here + ProcessItemName(rom, true); switch (rom.Type) { diff --git a/SabreTools.Library/DatFiles/Missfile.cs b/SabreTools.Library/DatFiles/Missfile.cs index c9765f00..cdf3b35d 100644 --- a/SabreTools.Library/DatFiles/Missfile.cs +++ b/SabreTools.Library/DatFiles/Missfile.cs @@ -154,74 +154,27 @@ namespace SabreTools.Library.DatFiles try { - string state = "", name = "", pre = "", post = ""; + string state = ""; - pre = CreatePrefixPostfix(rom, true); - post = CreatePrefixPostfix(rom, false); + // Process the item name + ProcessItemName(rom, false, alwaysRomName: false); // If we're in Romba mode, the state is consistent if (Romba) { - if (rom.Type == ItemType.Rom) - { - // We can only write out if there's a SHA-1 - if (!String.IsNullOrWhiteSpace(((Rom)rom).SHA1)) - { - name = ((Rom)rom).SHA1.Substring(0, 2) - + "/" + ((Rom)rom).SHA1.Substring(2, 2) - + "/" + ((Rom)rom).SHA1.Substring(4, 2) - + "/" + ((Rom)rom).SHA1.Substring(6, 2) - + "/" + ((Rom)rom).SHA1 + ".gz"; - state += pre + name + post + "\n"; - } - } - else if (rom.Type == ItemType.Disk) - { - // We can only write out if there's a SHA-1 - if (!String.IsNullOrWhiteSpace(((Disk)rom).SHA1)) - { - name = ((Disk)rom).SHA1.Substring(0, 2) - + "/" + ((Disk)rom).SHA1.Substring(2, 2) - + "/" + ((Disk)rom).SHA1.Substring(4, 2) - + "/" + ((Disk)rom).SHA1.Substring(6, 2) - + "/" + ((Disk)rom).SHA1 + ".gz"; - state += pre + name + post + "\n"; - } - } + state += rom.Name + "\n"; } - // Otherwise, use any flags else { - name = (UseRomName ? rom.Name : rom.MachineName); - if (!String.IsNullOrWhiteSpace(ReplaceExtension) || RemoveExtension) - { - if (RemoveExtension) - { - ReplaceExtension = ""; - } - - string dir = Path.GetDirectoryName(name); - dir = (dir.StartsWith(Path.DirectorySeparatorChar.ToString()) ? dir.Remove(0, 1) : dir); - name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + ReplaceExtension); - } - if (!String.IsNullOrWhiteSpace(AddExtension)) - { - name += AddExtension; - } - if (UseRomName && GameName) - { - name = Path.Combine(rom.MachineName, name); - } - if (!UseRomName && rom.MachineName != lastgame) { - state += pre + name + post + "\n"; + state += rom.Name + "\n"; lastgame = rom.MachineName; } else if (UseRomName) { - state += pre + name + post + "\n"; + state += rom.Name + "\n"; } } diff --git a/SabreTools.Library/DatFiles/OfflineList.cs b/SabreTools.Library/DatFiles/OfflineList.cs index d4809724..e9cf880d 100644 --- a/SabreTools.Library/DatFiles/OfflineList.cs +++ b/SabreTools.Library/DatFiles/OfflineList.cs @@ -956,8 +956,7 @@ namespace SabreTools.Library.DatFiles string state = ""; // Pre-process the item name - rom.Name = CreatePrefixPostfix(rom, true) + (GameName ? Path.Combine(rom.MachineName, rom.Name) : rom.Name) + CreatePrefixPostfix(rom, false); - rom.Name = rom.Name.Replace("\"", ""); // Quotes are not needed here + ProcessItemName(rom, true); state += "\t\t\n" + "\t\t\t1\n" diff --git a/SabreTools.Library/DatFiles/RomCenter.cs b/SabreTools.Library/DatFiles/RomCenter.cs index 23acc1bd..55f8c561 100644 --- a/SabreTools.Library/DatFiles/RomCenter.cs +++ b/SabreTools.Library/DatFiles/RomCenter.cs @@ -341,8 +341,7 @@ namespace SabreTools.Library.DatFiles string state = ""; // Pre-process the item name - rom.Name = CreatePrefixPostfix(rom, true) + (GameName ? Path.Combine(rom.MachineName, rom.Name) : rom.Name) + CreatePrefixPostfix(rom, false); - rom.Name = rom.Name.Replace("\"", ""); // Quotes are not needed here + ProcessItemName(rom, true); if (rom.Type == ItemType.Rom) { diff --git a/SabreTools.Library/DatFiles/SabreDat.cs b/SabreTools.Library/DatFiles/SabreDat.cs index 463c55ed..d9d64a32 100644 --- a/SabreTools.Library/DatFiles/SabreDat.cs +++ b/SabreTools.Library/DatFiles/SabreDat.cs @@ -831,8 +831,7 @@ namespace SabreTools.Library.DatFiles string state = "", prefix = ""; // Pre-process the item name - rom.Name = CreatePrefixPostfix(rom, true) + (GameName ? Path.Combine(rom.MachineName, rom.Name) : rom.Name) + CreatePrefixPostfix(rom, false); - rom.Name = rom.Name.Replace("\"", ""); // Quotes are not needed here + ProcessItemName(rom, true); for (int i = 0; i < depth; i++) { diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs index 76e050df..9e999697 100644 --- a/SabreTools.Library/DatFiles/SeparatedValue.cs +++ b/SabreTools.Library/DatFiles/SeparatedValue.cs @@ -450,7 +450,21 @@ namespace SabreTools.Library.DatFiles try { - string state = "", pre = "", post = ""; + // Initialize all strings + string state = "", + pre = "", + post = "", + type = "", + romname = "", + diskname = "", + size = "", + crc = "", + md5 = "", + sha1 = "", + sha256 = "", + sha384 = "", + sha512 = "", + status = ""; // Separated values should only output Rom and Disk if (rom.Type != ItemType.Disk && rom.Type != ItemType.Rom) @@ -458,50 +472,51 @@ namespace SabreTools.Library.DatFiles return true; } - pre = CreatePrefixPostfix(rom, true); - post = CreatePrefixPostfix(rom, false); - if (rom.Type == ItemType.Rom) { - string inline = string.Format("\"" + FileName + "\"" - + "{0}\"" + Name + "\"" - + "{0}\"" + Description + "\"" - + "{0}\"" + rom.MachineName + "\"" - + "{0}\"" + rom.MachineDescription + "\"" - + "{0}" + "\"rom\"" - + "{0}\"" + rom.Name + "\"" - + "{0}" + "\"\"" - + "{0}\"" + ((Rom)rom).Size + "\"" - + "{0}\"" + ((Rom)rom).CRC + "\"" - + "{0}\"" + ((Rom)rom).MD5 + "\"" - + "{0}\"" + ((Rom)rom).SHA1 + "\"" - + "{0}\"" + ((Rom)rom).SHA256 + "\"" - // + "{0}\"" + ((Rom)rom).SHA384 + "\"" - // + "{0}\"" + ((Rom)rom).SHA512 + "\"" - + "{0}" + (((Rom)rom).ItemStatus != ItemStatus.None ? "\"" + ((Rom)rom).ItemStatus.ToString() + "\"" : "\"\""), _delim); - state += pre + inline + post + "\n"; + type = "rom"; + romname = rom.Name; + size = ((Rom)rom).Size.ToString(); + crc = ((Rom)rom).CRC; + md5 = ((Rom)rom).MD5; + sha1 = ((Rom)rom).SHA1; + sha256 = ((Rom)rom).SHA256; + sha384 = ((Rom)rom).SHA384; + sha512 = ((Rom)rom).SHA512; + status = (((Rom)rom).ItemStatus != ItemStatus.None ? "\"" + ((Rom)rom).ItemStatus.ToString() + "\"" : "\"\""); } else if (rom.Type == ItemType.Disk) { - string inline = string.Format("\"" + FileName + "\"" - + "{0}\"" + Name + "\"" - + "{0}\"" + Description + "\"" - + "{0}\"" + rom.MachineName + "\"" - + "{0}\"" + rom.MachineDescription + "\"" - + "{0}" + "\"disk\"" - + "{0}" + "\"\"" - + "{0}\"" + rom.Name + "\"" - + "{0}" + "\"\"" - + "{0}" + "\"\"" - + "{0}\"" + ((Disk)rom).MD5 + "\"" - + "{0}\"" + ((Disk)rom).SHA1 + "\"" - + "{0}\"" + ((Disk)rom).SHA256 + "\"" - // + "{0}\"" + ((Rom)rom).SHA384 + "\"" - // + "{0}\"" + ((Rom)rom).SHA512 + "\"" - + "{0}" + (((Disk)rom).ItemStatus != ItemStatus.None ? "\"" + ((Disk)rom).ItemStatus.ToString() + "\"" : "\"\""), _delim); - state += pre + inline + post + "\n"; + type = "disk"; + diskname = rom.Name; + md5 = ((Disk)rom).MD5; + sha1 = ((Disk)rom).SHA1; + sha256 = ((Disk)rom).SHA256; + sha384 = ((Disk)rom).SHA384; + sha512 = ((Disk)rom).SHA512; + status = (((Disk)rom).ItemStatus != ItemStatus.None ? "\"" + ((Disk)rom).ItemStatus.ToString() + "\"" : "\"\""); } + pre = CreatePrefixPostfix(rom, true); + post = CreatePrefixPostfix(rom, false); + string inline = string.Format("\"" + FileName + "\"" + + "{0}\"" + Name + "\"" + + "{0}\"" + Description + "\"" + + "{0}\"" + rom.MachineName + "\"" + + "{0}\"" + rom.MachineDescription + "\"" + + "{0}\"" + type + "\"" + + "{0}\"" + romname + "\"" + + "{0}\"" + diskname + "\"" + + "{0}\"" + size + "\"" + + "{0}\"" + crc + "\"" + + "{0}\"" + md5 + "\"" + + "{0}\"" + sha1 + "\"" + + "{0}\"" + sha256 + "\"" + // + "{0}\"" + sha384 + "\"" + // + "{0}\"" + sha512 + "\"" + + "{0}" + status, _delim); + state += pre + inline + post + "\n"; + sw.Write(state); sw.Flush(); } diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs index 22b4b349..9c251879 100644 --- a/SabreTools.Library/DatFiles/SoftwareList.cs +++ b/SabreTools.Library/DatFiles/SoftwareList.cs @@ -787,8 +787,7 @@ namespace SabreTools.Library.DatFiles string state = ""; // Pre-process the item name - rom.Name = CreatePrefixPostfix(rom, true) + (GameName ? Path.Combine(rom.MachineName, rom.Name) : rom.Name) + CreatePrefixPostfix(rom, false); - rom.Name = rom.Name.Replace("\"", ""); // Quotes are not needed here + ProcessItemName(rom, true); state += "\t\t\n"; diff --git a/SabreTools.Library/README.1ST b/SabreTools.Library/README.1ST index 9a3833b3..645a787f 100644 --- a/SabreTools.Library/README.1ST +++ b/SabreTools.Library/README.1ST @@ -742,10 +742,9 @@ Options: -rep, --replace-extension Replace all extensions with specified When an extension exists, replace it with the provided instead. - [Missfile only] -rme, --remove-extensions Remove all extensions from all items - For each item, remove the extension. [Missfile only] + For each item, remove the extension. -ro, --romba Treat like a Romba depot (requires SHA-1) This flag allows reading and writing of DATs and output files to diff --git a/SabreTools/SabreTools.Help.cs b/SabreTools/SabreTools.Help.cs index 9e19785a..456f3454 100644 --- a/SabreTools/SabreTools.Help.cs +++ b/SabreTools/SabreTools.Help.cs @@ -858,7 +858,7 @@ namespace SabreTools new List() { "-rme", "--remove-extensions" }, "Remove all extensions from all items", FeatureType.Flag, - longDescription: "For each item, remove the extension. [Missfile only]"); + longDescription: "For each item, remove the extension."); } } private static Feature removeMd5Flag @@ -1877,7 +1877,7 @@ Possible values are: None, Good, BadDump, Nodump, Verified"); new List() { "-ae", "--add-extension" }, "Add an extension to each item", FeatureType.String, - longDescription: "Add a postfix extension to each full item name. [Missfile only]"); + longDescription: "Add a postfix extension to each full item name."); } } private static Feature authorStringInput @@ -2147,7 +2147,7 @@ Some special strings that can be used: new List() { "-rep", "--replace-extension" }, "Replace all extensions with specified", FeatureType.String, - longDescription: "When an extension exists, replace it with the provided instead. [Missfile only]"); + longDescription: "When an extension exists, replace it with the provided instead."); } } private static Feature rootStringInput