Add convert to RomCenter functionality!

This commit is contained in:
Matt Nadareski
2016-05-16 15:38:33 -07:00
parent 40de13ac3d
commit 47e8f11f82
4 changed files with 141 additions and 24 deletions

View File

@@ -55,6 +55,7 @@ namespace SabreTools
bare = false, bare = false,
convertMiss = false, convertMiss = false,
convertCMP = false, convertCMP = false,
convertRC = false,
convertXml = false, convertXml = false,
dedup = false, dedup = false,
diff = false, diff = false,
@@ -120,6 +121,10 @@ namespace SabreTools
case "--convert-miss": case "--convert-miss":
convertMiss = true; convertMiss = true;
break; break;
case "-cr":
case "--convert-rc":
convertRC = true;
break;
case "-cx": case "-cx":
case "--convert-xml": case "--convert-xml":
convertXml = true; convertXml = true;
@@ -295,7 +300,8 @@ namespace SabreTools
} }
// If more than one switch is enabled or help is set, show the help screen // If more than one switch is enabled or help is set, show the help screen
if (help || !(add ^ convertMiss ^ convertCMP ^ convertXml ^ extsplit ^ generate ^ genall ^ import ^ listsrc ^ listsys ^ (merge || diff) ^ rem ^ trim)) if (help || !(add ^ convertMiss ^ convertCMP ^ convertRC ^ convertXml ^ extsplit ^ generate ^ genall ^
import ^ listsrc ^ listsys ^ (merge || diff) ^ rem ^ trim))
{ {
Build.Help(); Build.Help();
logger.Close(); logger.Close();
@@ -303,7 +309,7 @@ namespace SabreTools
} }
// If a switch that requires a filename is set and no file is, show the help screen // If a switch that requires a filename is set and no file is, show the help screen
if (inputs.Count == 0 && (convertMiss || convertCMP || convertXml || extsplit || import || (merge || diff) || trim)) if (inputs.Count == 0 && (convertMiss || convertCMP || convertRC || convertXml || extsplit || import || (merge || diff) || trim))
{ {
Build.Help(); Build.Help();
logger.Close(); logger.Close();
@@ -354,7 +360,7 @@ namespace SabreTools
} }
} }
// Convert XML DAT to CMP DAT // Convert any DAT to CMP DAT
else if (convertCMP) else if (convertCMP)
{ {
foreach (string input in inputs) foreach (string input in inputs)
@@ -363,7 +369,16 @@ namespace SabreTools
} }
} }
// Convert CMP DAT to XML DAT // Convert any DAT to RC DAT
else if (convertRC)
{
foreach (string input in inputs)
{
InitConvertRC(input);
}
}
// Convert any DAT to XML DAT
else if (convertXml) else if (convertXml)
{ {
foreach (string input in inputs) foreach (string input in inputs)
@@ -626,12 +641,13 @@ Make a selection:
=========================== ===========================
Make a selection: Make a selection:
1) Convert XML DAT to CMP 1) Convert DAT to ClrMamePro
2) Convert CMP DAT to XML 2) Convert DAT to RomCenter
3) Convert DAT to missfile 3) Convert DAT to XML
4) Trim all entries in DAT and merge into a single game 4) Convert DAT to missfile
5) Merge, diff, and/or dedup 2 or more DAT files 5) Trim all entries in DAT and merge into a single game
6) Split DAT using 2 extensions 6) Merge, diff, and/or dedup 2 or more DAT files
7) Split DAT using 2 extensions
B) Go back to the previous menu B) Go back to the previous menu
"); ");
Console.Write("Enter selection: "); Console.Write("Enter selection: ");
@@ -642,18 +658,21 @@ Make a selection:
ConvertCMPMenu(); ConvertCMPMenu();
break; break;
case "2": case "2":
ConvertXMLMenu(); ConvertRCMenu();
break; break;
case "3": case "3":
ConvertMissMenu(); ConvertXMLMenu();
break; break;
case "4": case "4":
TrimMergeMenu(); ConvertMissMenu();
break; break;
case "5": case "5":
MergeDiffMenu(); TrimMergeMenu();
break; break;
case "6": case "6":
MergeDiffMenu();
break;
case "7":
ExtSplitMenu(); ExtSplitMenu();
break; break;
} }
@@ -661,7 +680,7 @@ Make a selection:
} }
/// <summary> /// <summary>
/// Show the text-based XML to CMP conversion menu /// Show the text-based any to CMP conversion menu
/// </summary> /// </summary>
private static void ConvertCMPMenu() private static void ConvertCMPMenu()
{ {
@@ -670,9 +689,9 @@ Make a selection:
{ {
Console.Clear(); Console.Clear();
Build.Start("DATabase"); Build.Start("DATabase");
Console.WriteLine(@"XML -> CMP CONVERT MENU Console.WriteLine(@"ANY -> CMP CONVERT MENU
=========================== ===========================
Enter the name of a DAT file to convert from XML to CMP Enter the name of a DAT file to convert to CMP
or 'b' to go back to the previous menu: or 'b' to go back to the previous menu:
"); ");
selection = Console.ReadLine(); selection = Console.ReadLine();
@@ -687,6 +706,33 @@ or 'b' to go back to the previous menu:
return; return;
} }
/// <summary>
/// Show the text-based any to RomCenter conversion menu
/// </summary>
private static void ConvertRCMenu()
{
string selection = "";
while (selection.ToLowerInvariant() != "b")
{
Console.Clear();
Build.Start("DATabase");
Console.WriteLine(@"ANY -> RC CONVERT MENU
===========================
Enter the name of a DAT file to convert to RomCenter
or 'b' to go back to the previous menu:
");
selection = Console.ReadLine();
if (selection.ToLowerInvariant() != "b")
{
Console.Clear();
InitConvertRC(selection);
Console.Write("\nPress any key to continue...");
Console.ReadKey();
}
}
return;
}
/// <summary> /// <summary>
/// Show the text-based CMP to XML conversion menu /// Show the text-based CMP to XML conversion menu
/// </summary> /// </summary>
@@ -697,9 +743,9 @@ or 'b' to go back to the previous menu:
{ {
Console.Clear(); Console.Clear();
Build.Start("DATabase"); Build.Start("DATabase");
Console.WriteLine(@"CMP -> XML CONVERT MENU Console.WriteLine(@"ANY -> XML CONVERT MENU
=========================== ===========================
Enter the name of a DAT file to convert from CMP to XML Enter the name of a DAT file to convert to XML
or 'b' to go back to the previous menu: or 'b' to go back to the previous menu:
"); ");
selection = Console.ReadLine(); selection = Console.ReadLine();
@@ -1243,7 +1289,7 @@ Make a selection:
} }
/// <summary> /// <summary>
/// Wrap converting DAT file from XML to ClrMamePro /// Wrap converting DAT file from any format to ClrMamePro
/// </summary> /// </summary>
/// <param name="filename"></param> /// <param name="filename"></param>
private static void InitConvertCMP(string filename) private static void InitConvertCMP(string filename)
@@ -1283,7 +1329,47 @@ Make a selection:
} }
/// <summary> /// <summary>
/// Wrap converting DAT file from ClrMamePro to XML /// Wrap converting DAT file from any format to RomCenter
/// </summary>
/// <param name="filename"></param>
private static void InitConvertRC(string filename)
{
if (File.Exists(filename))
{
logger.User("Converting " + filename);
DatData datdata = new DatData
{
Name = "",
Description = "",
Category = "",
Version = "",
Date = "",
Author = "",
Email = "",
Homepage = "",
Url = "",
Comment = "",
OutputFormat = OutputFormat.RomCenter,
Roms = new Dictionary<string, List<RomData>>(),
MergeRoms = false,
};
datdata = RomManipulation.ParseDict(filename, 0, 0, datdata, logger);
logger.User("datdata.Description: " + datdata.Description);
datdata.Description += ".new";
Output.WriteToDatFromDict(datdata, Path.GetDirectoryName(filename), logger);
}
else
{
logger.Error("I'm sorry but " + filename + " doesn't exist!");
}
return;
}
/// <summary>
/// Wrap converting DAT file from any format to XML
/// </summary> /// </summary>
/// <param name="filename"></param> /// <param name="filename"></param>
private static void InitConvertXML(string filename) private static void InitConvertXML(string filename)

View File

@@ -97,6 +97,8 @@ Options:
-q, --quotes Put double-quotes around each item -q, --quotes Put double-quotes around each item
-ae=, --add-ext= Add an extension to each item -ae=, --add-ext= Add an extension to each item
-re=, --rep-ext= Replace all extensions with specified -re=, --rep-ext= Replace all extensions with specified
-cr, --convert-rc Convert any DAT to RomCenter
-out= Output directory
-cx, --convert-xml Convert any DAT to XML -cx, --convert-xml Convert any DAT to XML
-out= Output directory -out= Output directory
-es, --ext-split Split a DAT by two file extensions -es, --ext-split Split a DAT by two file extensions

View File

@@ -304,7 +304,7 @@ namespace SabreTools.Helper
"¬" + HttpUtility.HtmlEncode(rom.Game) + "¬" + HttpUtility.HtmlEncode(rom.Game) +
"¬" + HttpUtility.HtmlEncode(rom.Name) + "¬" + HttpUtility.HtmlEncode(rom.Name) +
"¬" + rom.CRC.ToLowerInvariant() + "¬" + rom.CRC.ToLowerInvariant() +
"¬" + (rom.Size != -1 ? rom.Size.ToString() : "") + "¬¬¬"; "¬" + (rom.Size != -1 ? rom.Size.ToString() : "") + "¬¬¬\n";
break; break;
case OutputFormat.Xml: case OutputFormat.Xml:
state += "\t\t<" + rom.Type + " name=\"" + HttpUtility.HtmlEncode(rom.Name) + "\"" + state += "\t\t<" + rom.Type + " name=\"" + HttpUtility.HtmlEncode(rom.Name) + "\"" +

View File

@@ -20,7 +20,7 @@ namespace SabreTools.Helper
/// Return if the file is XML or not /// Return if the file is XML or not
/// </summary> /// </summary>
/// <param name="filename">Name of the file to be parsed</param> /// <param name="filename">Name of the file to be parsed</param>
/// <returns>public static bool IsXmlDat(string filename) /// <returns>True if the DAT is probably XML, false otherwise</returns>
public static bool IsXmlDat(string filename) public static bool IsXmlDat(string filename)
{ {
try try
@@ -36,6 +36,26 @@ namespace SabreTools.Helper
} }
} }
/// <summary>
/// Return if the file is RomCenter or not
/// </summary>
/// <param name="filename">Name of the file to be parsed</param>
/// <returns>True if the DAT is probably XML, false otherwise</returns>
public static bool IsRCDat(string filename)
{
try
{
StreamReader sr = new StreamReader(File.OpenRead(filename));
string first = sr.ReadLine();
sr.Close();
return first.Contains("[") && first.Contains("]");
}
catch (Exception)
{
return false;
}
}
/// <summary> /// <summary>
/// Get the XmlDocument associated with a file, if possible /// Get the XmlDocument associated with a file, if possible
/// </summary> /// </summary>
@@ -112,9 +132,18 @@ namespace SabreTools.Helper
xtr.DtdProcessing = DtdProcessing.Ignore; xtr.DtdProcessing = DtdProcessing.Ignore;
return xtr; return xtr;
} }
else if (IsRCDat(filename))
{
logger.Log("RomCenter DAT detected");
StringReader sr = new StringReader(Converters.RomCenterToXML(File.ReadAllLines(filename)).ToString());
XmlTextReader xtr = new XmlTextReader(sr);
xtr.WhitespaceHandling = WhitespaceHandling.None;
xtr.DtdProcessing = DtdProcessing.Ignore;
return xtr;
}
else else
{ {
logger.Log("Non-XML DAT detected"); logger.Log("ClrMamePro DAT detected");
StringReader sr = new StringReader(Converters.ClrMameProToXML(File.ReadAllLines(filename)).ToString()); StringReader sr = new StringReader(Converters.ClrMameProToXML(File.ReadAllLines(filename)).ToString());
XmlTextReader xtr = new XmlTextReader(sr); XmlTextReader xtr = new XmlTextReader(sr);
xtr.WhitespaceHandling = WhitespaceHandling.None; xtr.WhitespaceHandling = WhitespaceHandling.None;