mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Merge SingleGame, part 3
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -23,6 +23,3 @@
|
||||
/SabreToolsUI/obj
|
||||
/SabreToolsUI/obj/Debug
|
||||
/SabreToolsUI/obj/Release
|
||||
/SingleGame/obj
|
||||
/SingleGame/obj/Debug
|
||||
/SingleGame/obj/Release
|
||||
@@ -296,7 +296,7 @@ namespace SabreTools
|
||||
{
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
InitSingleGame(input, root, norename, disableForce);
|
||||
InitSingleGame(input, root, !norename, !disableForce);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -646,7 +646,6 @@ Make a selection:
|
||||
/// <remarks>
|
||||
/// At an unspecified future date, this will also include the following currently-separate programs:
|
||||
/// - DatSplit
|
||||
/// - SingleGame
|
||||
/// - MergeDAT
|
||||
/// - DATFromDir
|
||||
/// - DatToMiss
|
||||
@@ -664,7 +663,7 @@ Make a selection:
|
||||
|
||||
1) Convert XML DAT to RV
|
||||
2) Convert RV DAT to XML
|
||||
3) Merge all entries into a single game and trim
|
||||
3) Trim all entries in DAT and optionally merge into a single game
|
||||
B) Go back to the previous menu
|
||||
");
|
||||
Console.Write("Enter selection: ");
|
||||
@@ -797,23 +796,73 @@ or 'b' to go back to the previous menu:
|
||||
return;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show the text-based SingleGame menu
|
||||
/// </summary>
|
||||
private static void SingleGameMenu()
|
||||
{
|
||||
string selection = "", input = "", root = "";
|
||||
bool forceunzip = true, rename = true;
|
||||
while (selection.ToLowerInvariant() != "b")
|
||||
{
|
||||
Console.Clear();
|
||||
Build.Start("DATabase");
|
||||
Console.WriteLine(@"SINGLE GAME MENU
|
||||
===========================
|
||||
Make a selection:
|
||||
|
||||
1) File or folder to process" + (input != "" ? ":\n\t" + input : "") + @"
|
||||
2) Root folder for reference" + (root != "" ? ":\n\t" + root : "") + @"
|
||||
3) " + (forceunzip ? "Remove 'forcepacking=\"unzip\"' from output" : "Add 'forcepacking=\"unzip\"' to output") + @"
|
||||
4) " + (rename ? "Disable game renaming" : "Enable game renaming") + @"
|
||||
5) Process the DAT
|
||||
B) Go back to the previous menu
|
||||
");
|
||||
Console.Write("Enter selection: ");
|
||||
selection = Console.ReadLine();
|
||||
switch (selection)
|
||||
{
|
||||
case "1":
|
||||
Console.Clear();
|
||||
Console.Write("Please enter the file or folder name: ");
|
||||
input = Console.ReadLine();
|
||||
break;
|
||||
case "2":
|
||||
Console.Clear();
|
||||
Console.Write("Please enter the root folder name: ");
|
||||
root = Console.ReadLine();
|
||||
break;
|
||||
case "3":
|
||||
forceunzip = !forceunzip;
|
||||
break;
|
||||
case "4":
|
||||
rename = !rename;
|
||||
break;
|
||||
case "5":
|
||||
Console.Clear();
|
||||
InitSingleGame(input, root, rename, forceunzip);
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wrap converting a DAT to single-game mode
|
||||
/// Wrap trimming and merging a single DAT
|
||||
/// </summary>
|
||||
/// <param name="input">Input file or folder to be converted</param>
|
||||
/// <param name="root">Root directory to base path lengths on</param>
|
||||
/// <param name="norename">True is games should not be renamed</param>
|
||||
/// <param name="disableForce">True if forcepacking="unzip" should be omitted</param>
|
||||
private static void InitSingleGame(string input, string root, bool norename, bool disableForce)
|
||||
/// <param name="rename">True is games should not be renamed</param>
|
||||
/// <param name="force">True if forcepacking="unzip" should be included</param>
|
||||
private static void InitSingleGame(string input, string root, bool rename, bool force)
|
||||
{
|
||||
if (File.Exists(input) || Directory.Exists(input))
|
||||
// Strip any quotations from the name
|
||||
input = input.Replace("\"", "");
|
||||
|
||||
if (input != "" && File.Exists(input) || Directory.Exists(input))
|
||||
{
|
||||
SingleGame sg = new SingleGame(input, root, norename, disableForce);
|
||||
SingleGame sg = new SingleGame(input, root, rename, force, logger);
|
||||
sg.Process();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -9,75 +9,35 @@ namespace SabreTools
|
||||
{
|
||||
public class SingleGame
|
||||
{
|
||||
// Instance variables
|
||||
private static string _filename = "";
|
||||
private static string _path = "";
|
||||
private static bool _rename = true;
|
||||
private static bool _forceunpack = true;
|
||||
private static Logger logger;
|
||||
private static bool _rename;
|
||||
private static bool _forceunpack;
|
||||
private static Logger _logger;
|
||||
|
||||
public static void Main(string[] args)
|
||||
/// <summary>
|
||||
/// Create a new SingleGame object
|
||||
/// </summary>
|
||||
/// <param name="filename">Name of the file or folder to be processed</param>
|
||||
/// <param name="path">Root path to use for trimming</param>
|
||||
/// <param name="rename">True if games should be renamed into a uniform string, false otherwise</param>
|
||||
/// <param name="forceunpack">True if forcepacking="unzip" should be set on the output, false otherwise</param>
|
||||
/// <param name="logger">Logger object for console and file output</param>
|
||||
public SingleGame(string filename, string path, bool rename, bool forceunpack, Logger logger)
|
||||
{
|
||||
Console.Clear();
|
||||
|
||||
// Credits take precidence over all
|
||||
if ((new List<string>(args)).Contains("--credits"))
|
||||
{
|
||||
Build.Credits();
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.Length == 0)
|
||||
{
|
||||
Build.Help();
|
||||
return;
|
||||
}
|
||||
|
||||
bool log = false;
|
||||
foreach (string arg in args)
|
||||
{
|
||||
switch (arg)
|
||||
{
|
||||
case "-nr":
|
||||
case "--no-rename":
|
||||
_rename = false;
|
||||
break;
|
||||
case "-df":
|
||||
case "--disable-force":
|
||||
_forceunpack = false;
|
||||
break;
|
||||
case "-l":
|
||||
case "--log":
|
||||
log = true;
|
||||
break;
|
||||
default:
|
||||
if (arg.StartsWith("-rd=") || arg.StartsWith("--root-dir="))
|
||||
{
|
||||
_path = arg.Split('=')[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
_filename = arg;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If the filename is blank, show the help and exit
|
||||
if (_filename == "")
|
||||
{
|
||||
Build.Help();
|
||||
return;
|
||||
}
|
||||
|
||||
logger = new Logger(false, "singlegame.log");
|
||||
logger.Start();
|
||||
|
||||
// Output the title
|
||||
Build.Start("SingleGame");
|
||||
|
||||
// Set the possibly new value for logger
|
||||
logger.ToFile = log;
|
||||
_filename = filename;
|
||||
_path = path;
|
||||
_rename = rename;
|
||||
_forceunpack = forceunpack;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Trim and process the given DAT or folder of DATs
|
||||
/// </summary>
|
||||
public void Process()
|
||||
{
|
||||
_path = (_path == "" ? Environment.CurrentDirectory : _path);
|
||||
|
||||
// Drag and drop means quotes; we don't want quotes
|
||||
@@ -89,7 +49,7 @@ namespace SabreTools
|
||||
// If it's a single file, handle it as such
|
||||
if (!Directory.Exists(_filename) && File.Exists(_filename))
|
||||
{
|
||||
logger.Log("File found: " + _filename);
|
||||
_logger.Log("File found: " + _filename);
|
||||
ProcessDAT(_filename, _path, _rename);
|
||||
}
|
||||
// If it's a directory, loop through the files and see if any are DATs
|
||||
@@ -101,15 +61,15 @@ namespace SabreTools
|
||||
_filename += Path.DirectorySeparatorChar;
|
||||
}
|
||||
|
||||
logger.Log("Directory found: " + _filename);
|
||||
_logger.Log("Directory found: " + _filename);
|
||||
foreach (string file in Directory.EnumerateFiles(_filename, "*", SearchOption.AllDirectories))
|
||||
{
|
||||
logger.Log("File found: " + file);
|
||||
_logger.Log("File found: " + file);
|
||||
ProcessDAT(file, _path, _rename);
|
||||
}
|
||||
}
|
||||
|
||||
logger.Close();
|
||||
_logger.Close();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -120,7 +80,7 @@ namespace SabreTools
|
||||
/// <param name="rename">True if roms are to be renamed</param>
|
||||
private static void ProcessDAT(string filename, string path, bool rename)
|
||||
{
|
||||
List<RomData> roms = RomManipulation.Parse(filename, 0, 0, logger);
|
||||
List<RomData> roms = RomManipulation.Parse(filename, 0, 0, _logger);
|
||||
|
||||
// Trim all file names according to the path that's set
|
||||
List<RomData> outroms = new List<RomData>();
|
||||
@@ -149,7 +109,7 @@ namespace SabreTools
|
||||
|
||||
// Now write the file out accordingly
|
||||
Output.WriteToDat(Path.GetFileNameWithoutExtension(filename),
|
||||
Path.GetFileNameWithoutExtension(filename), "", "", "", "", _forceunpack, !RomManipulation.IsXmlDat(filename), Path.GetDirectoryName(filename), outroms, logger);
|
||||
Path.GetFileNameWithoutExtension(filename), "", "", "", "", _forceunpack, !RomManipulation.IsXmlDat(filename), Path.GetDirectoryName(filename), outroms, _logger);
|
||||
|
||||
// Remove the original file if different and inform the user
|
||||
if (Path.GetExtension(filename) != (RomManipulation.IsXmlDat(filename) ? ".xml" : ".dat"))
|
||||
@@ -157,11 +117,11 @@ namespace SabreTools
|
||||
try
|
||||
{
|
||||
File.Delete(filename);
|
||||
logger.Log("Original file \"" + filename + "\" deleted");
|
||||
_logger.Log("Original file \"" + filename + "\" deleted");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Error(ex.ToString());
|
||||
_logger.Error(ex.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,8 +11,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreToolsUI", "SabreToolsU
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DatSplit", "DatSplit\DatSplit.csproj", "{9EB4738D-CAE7-420D-8A26-78A53CEA5E82}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SingleGame", "SingleGame\SingleGame.csproj", "{07EB8EA7-303A-407F-A881-060ED4595D7F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreHelper", "SabreHelper\SabreHelper.csproj", "{225A1AFD-0890-44E8-B779-7502665C23A5}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DATFromDir", "DATFromDir\DATFromDir.csproj", "{382B75D3-079E-49D5-A830-54DD6EB5A02D}"
|
||||
@@ -44,10 +42,6 @@ Global
|
||||
{9EB4738D-CAE7-420D-8A26-78A53CEA5E82}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9EB4738D-CAE7-420D-8A26-78A53CEA5E82}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9EB4738D-CAE7-420D-8A26-78A53CEA5E82}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{07EB8EA7-303A-407F-A881-060ED4595D7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{07EB8EA7-303A-407F-A881-060ED4595D7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{07EB8EA7-303A-407F-A881-060ED4595D7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{07EB8EA7-303A-407F-A881-060ED4595D7F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{225A1AFD-0890-44E8-B779-7502665C23A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{225A1AFD-0890-44E8-B779-7502665C23A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{225A1AFD-0890-44E8-B779-7502665C23A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
|
||||
Reference in New Issue
Block a user