mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
[DATabase] Move DATabaseTwo functions to DATabase
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -2,9 +2,6 @@
|
||||
/DATabase/obj
|
||||
/DATabase/obj/Debug
|
||||
/DATabase/obj/Release
|
||||
/DATabaseTwo/obj
|
||||
/DATabaseTwo/obj/Debug
|
||||
/DATabaseTwo/obj/Release
|
||||
/DATFromDir/obj
|
||||
/DATFromDir/obj/Debug
|
||||
/DATFromDir/obj/Release
|
||||
|
||||
@@ -11,13 +11,29 @@ namespace SabreTools
|
||||
/// <summary>
|
||||
/// Entry class for the DATabase application
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The following features are missing from DATabaseTwo with respect to the original DATabase:
|
||||
/// - Source merging
|
||||
/// - Custom DATs based on a system and a source
|
||||
/// - Multi-source and multi-system DATs
|
||||
///
|
||||
/// The following features need to (want to) be implemented in DATabaseTwo for further stability
|
||||
/// - Import updating file locations and names when SHA-1 hashes are matched
|
||||
/// - True duplicate DATs being removed from the import folder (SHA-1 matches)
|
||||
/// - Generate All only generating DATs that have been recently updated
|
||||
/// + This requires implementing a "last updated" data point for all DATs and tracking for "last generate" somewhere
|
||||
/// - Impelement a ToSort folder for DATs that will place DATs in the correct subfolder on Import
|
||||
/// </remarks>
|
||||
public class DATabase
|
||||
{
|
||||
private static Logger logger;
|
||||
private static string _dbName = "DATabase.sqlite";
|
||||
//private static string _dbName = "SabreTools.sqlite";
|
||||
// Private required variables
|
||||
private static string _datroot = "DATS";
|
||||
private static string _outroot = "Output";
|
||||
private static string _dbName = "dats.sqlite";
|
||||
private static string _connectionString = "Data Source=" + _dbName + ";Version = 3;";
|
||||
|
||||
private static Logger _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Start menu or use supplied parameters
|
||||
/// </summary>
|
||||
@@ -25,8 +41,8 @@ namespace SabreTools
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
// Perform initial setup and verification
|
||||
logger = new Logger(true, "database.log");
|
||||
logger.Start();
|
||||
_logger = new Logger(true, "database.log");
|
||||
_logger.Start();
|
||||
DBTools.EnsureDatabase(_dbName, _connectionString);
|
||||
Remapping.CreateRemappings();
|
||||
Console.Clear();
|
||||
@@ -35,7 +51,7 @@ namespace SabreTools
|
||||
if ((new List<string>(args)).Contains("--credits"))
|
||||
{
|
||||
Build.Credits();
|
||||
logger.Close();
|
||||
_logger.Close();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -43,7 +59,7 @@ namespace SabreTools
|
||||
if (args.Length == 0)
|
||||
{
|
||||
ShowMainMenu();
|
||||
logger.Close();
|
||||
_logger.Close();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -66,6 +82,7 @@ namespace SabreTools
|
||||
generate = false,
|
||||
genall = false,
|
||||
hashsplit = false,
|
||||
ignore = false,
|
||||
import = false,
|
||||
inplace = false,
|
||||
listsrc = false,
|
||||
@@ -179,6 +196,10 @@ namespace SabreTools
|
||||
case "--import":
|
||||
import = true;
|
||||
break;
|
||||
case "-ig":
|
||||
case "--ignore":
|
||||
ignore = true;
|
||||
break;
|
||||
case "-ip":
|
||||
case "--inplace":
|
||||
inplace = true;
|
||||
@@ -321,10 +342,10 @@ namespace SabreTools
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("Invalid input detected: " + arg);
|
||||
_logger.Error("Invalid input detected: " + arg);
|
||||
Console.WriteLine();
|
||||
Build.Help();
|
||||
logger.Close();
|
||||
_logger.Close();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
@@ -341,9 +362,9 @@ namespace SabreTools
|
||||
if (help || !(add ^ (convertMiss || romba) ^ convertCMP ^ convertRC ^ convertSD ^ convertXml ^ extsplit ^ generate ^
|
||||
genall ^ hashsplit ^ import ^ listsrc ^ listsys ^ (merge || diff) ^ rem ^ stats ^ trim))
|
||||
{
|
||||
logger.Error("Only one feature switch is allowed at a time");
|
||||
_logger.Error("Only one feature switch is allowed at a time");
|
||||
Build.Help();
|
||||
logger.Close();
|
||||
_logger.Close();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -351,9 +372,9 @@ namespace SabreTools
|
||||
if (inputs.Count == 0 && ((convertMiss || romba) || convertCMP || convertRC || convertSD
|
||||
|| convertXml || extsplit || hashsplit || import || (merge || diff) || stats || trim))
|
||||
{
|
||||
logger.Error("This feature requires at least one input");
|
||||
_logger.Error("This feature requires at least one input");
|
||||
Build.Help();
|
||||
logger.Close();
|
||||
_logger.Close();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -362,22 +383,21 @@ namespace SabreTools
|
||||
// Import a file or folder
|
||||
if (import)
|
||||
{
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
InitImport(input);
|
||||
}
|
||||
InitImport(ignore);
|
||||
}
|
||||
|
||||
// Generate a DAT
|
||||
else if (generate)
|
||||
{
|
||||
InitGenerate(systems, sources, outdir, norename, old);
|
||||
InitImport(ignore);
|
||||
InitGenerate(systems, norename, old);
|
||||
}
|
||||
|
||||
// Generate all DATs
|
||||
else if (genall)
|
||||
{
|
||||
InitGenerateAll(outdir, norename, old);
|
||||
InitImport(ignore);
|
||||
InitGenerateAll(norename, old);
|
||||
}
|
||||
|
||||
// List all available sources
|
||||
@@ -507,7 +527,7 @@ namespace SabreTools
|
||||
InitStats(inputs, single);
|
||||
}
|
||||
|
||||
logger.Close();
|
||||
_logger.Close();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -529,8 +549,8 @@ namespace SabreTools
|
||||
Make a selection:
|
||||
|
||||
1) Show command line usage
|
||||
2) Import a DAT file or folder
|
||||
3) Generate DAT files
|
||||
2) Check for new or changed DATs
|
||||
3) Generate System DATs
|
||||
4) DAT file tools
|
||||
5) List all available sources
|
||||
6) List all available systems
|
||||
@@ -593,21 +613,33 @@ Make a selection:
|
||||
private static void ImportMenu()
|
||||
{
|
||||
string selection = "";
|
||||
bool ignore = false;
|
||||
while (selection.ToLowerInvariant() != "b")
|
||||
{
|
||||
Console.Clear();
|
||||
Build.Start("DATabase");
|
||||
Build.Start("DATabaseTwo");
|
||||
Console.WriteLine(@"IMPORT MENU
|
||||
===========================
|
||||
Enter the name of a DAT file or folder containing DAT files
|
||||
or 'b' to go back to the previous menu:");
|
||||
Make a selection:
|
||||
|
||||
1) " + (ignore ? "Enable new source prompt" : "Disable new source prompt") + @"
|
||||
2) Begin import process
|
||||
B) Go back to the previous menu
|
||||
");
|
||||
Console.Write("Enter selection: ");
|
||||
selection = Console.ReadLine();
|
||||
if (selection.ToLowerInvariant() != "b")
|
||||
switch (selection)
|
||||
{
|
||||
InitImport(selection);
|
||||
case "1":
|
||||
ignore = !ignore;
|
||||
break;
|
||||
case "2":
|
||||
Console.Clear();
|
||||
InitImport(ignore);
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
ignore = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
@@ -618,23 +650,21 @@ or 'b' to go back to the previous menu:");
|
||||
/// </summary>
|
||||
private static void GenerateMenu()
|
||||
{
|
||||
string selection = "", systems = "", sources = "", outdir = "";
|
||||
string selection = "", system = "";
|
||||
bool norename = false, old = false;
|
||||
while (selection.ToLowerInvariant() != "b")
|
||||
{
|
||||
Console.Clear();
|
||||
Build.Start("DATabase");
|
||||
Build.Start("DATabaseTwo");
|
||||
Console.WriteLine(@"GENERATE MENU
|
||||
===========================
|
||||
Make a selection:
|
||||
|
||||
1) " + (norename ? "Enable game renaming" : "Disable game renaming") + @"
|
||||
2) " + (old ? "Enable XML output" : "Enable ClrMamePro output") + @"
|
||||
3) List of systems to generate from" + (systems != "" ? ": " + systems : "") + @"
|
||||
4) List of sources to generate from" + (sources != "" ? ": " + sources : "") + @"
|
||||
5) Enter an output folder" + (outdir != "" ? ":\n\t" + outdir : "") + @"
|
||||
6) Generate the DAT file
|
||||
7) Generate all available DAT files
|
||||
3) System ID to generate from" + (system != "" ? ": " + system : "") + @"
|
||||
4) Generate the DAT file for the specified system
|
||||
5) Generate all DAT files
|
||||
B) Go back to the previous menu
|
||||
");
|
||||
Console.Write("Enter selection: ");
|
||||
@@ -650,34 +680,23 @@ Make a selection:
|
||||
case "3":
|
||||
Console.Clear();
|
||||
ListSystems();
|
||||
Console.Write("Please enter the systems separated by commas: ");
|
||||
systems = Console.ReadLine();
|
||||
Console.Write("Please enter the System ID: ");
|
||||
system = Console.ReadLine();
|
||||
break;
|
||||
case "4":
|
||||
Console.Clear();
|
||||
ListSources();
|
||||
Console.Write("Please enter the sources separated by commas: ");
|
||||
sources = Console.ReadLine();
|
||||
InitGenerate(system, norename, old);
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
system = "";
|
||||
norename = false; old = false;
|
||||
break;
|
||||
case "5":
|
||||
Console.Clear();
|
||||
Console.Write("Please enter a folder name: ");
|
||||
outdir = Console.ReadLine();
|
||||
break;
|
||||
case "6":
|
||||
Console.Clear();
|
||||
InitGenerate(systems, sources, outdir, norename, old);
|
||||
InitGenerateAll(norename, old);
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
systems = ""; sources = ""; outdir = "";
|
||||
norename = false; old = false;
|
||||
break;
|
||||
case "7":
|
||||
Console.Clear();
|
||||
InitGenerateAll(outdir, norename, old);
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
systems = ""; sources = ""; outdir = "";
|
||||
system = "";
|
||||
norename = false; old = false;
|
||||
break;
|
||||
}
|
||||
@@ -1267,7 +1286,7 @@ Make a selection:
|
||||
break;
|
||||
case "4":
|
||||
Console.Clear();
|
||||
ListSystems(true);
|
||||
ListSystems();
|
||||
Console.Write("Please enter the system: ");
|
||||
InitRemoveSystem(Console.ReadLine());
|
||||
Console.Write("\nPress any key to continue...");
|
||||
@@ -1284,73 +1303,38 @@ Make a selection:
|
||||
#region Init Methods
|
||||
|
||||
/// <summary>
|
||||
/// Wrap importing a file or folder into the database
|
||||
/// Wrap importing and updating DATs
|
||||
/// </summary>
|
||||
/// <param name="filename">File or folder to be imported</param>
|
||||
private static void InitImport(string filename)
|
||||
/// <param name="ignore"></param>
|
||||
private static void InitImport(bool ignore)
|
||||
{
|
||||
Console.Clear();
|
||||
|
||||
// Drag and drop means quotes; we don't want quotes
|
||||
filename = filename.Replace("\"", "");
|
||||
|
||||
// Check to see if the second argument is a file that exists
|
||||
if (filename != "" && File.Exists(filename))
|
||||
{
|
||||
logger.User("Beginning import of " + filename);
|
||||
IImport imp = new Import(filename, _connectionString, logger);
|
||||
bool success = imp.ImportData();
|
||||
logger.User(filename + (success ? "" : " not") + " imported!");
|
||||
}
|
||||
// Check to see if the second argument is a directory that exists
|
||||
else if (filename != "" && Directory.Exists(filename))
|
||||
{
|
||||
foreach (string file in Directory.GetFiles(filename, "*", SearchOption.AllDirectories))
|
||||
{
|
||||
logger.User("Beginning import of " + file);
|
||||
IImport imp = new Import(file, _connectionString, logger);
|
||||
bool success = imp.ImportData();
|
||||
logger.User(file + (success ? "" : " not") + " imported!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("I'm sorry but " + filename + " doesn't exist!");
|
||||
}
|
||||
return;
|
||||
IImport imp = new ImportTwo(_datroot, _connectionString, _logger, ignore);
|
||||
imp.ImportData();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wrap generating a DAT from the database
|
||||
/// Wrap generating a DAT from the library
|
||||
/// </summary>
|
||||
/// <param name="systems">Comma-separated list of systems to be included in the DAT (blank means all)</param>
|
||||
/// <param name="sources">Comma-separated list of sources to be included in the DAT (blank means all)</param>
|
||||
/// <param name="system">System ID to be used in the DAT (blank means all)</param>
|
||||
/// <param name="norename">True if files should not be renamed with system and/or source in merged mode (default false)</param>
|
||||
/// <param name="old">True if the output file should be in ClrMamePro format (default false)</param>
|
||||
private static void InitGenerate(string systems, string sources, string outdir, bool norename, bool old)
|
||||
private static void InitGenerate(string systemid, bool norename, bool old)
|
||||
{
|
||||
IGenerate gen = new Generate(systems, sources, outdir, _connectionString, logger, norename, old);
|
||||
IGenerate gen = new GenerateTwo(systemid, "" /* sourceid */, _datroot, _outroot, _connectionString, _logger, norename, old);
|
||||
gen.Export();
|
||||
return;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wrap generating all standard DATs from the database
|
||||
/// Wrap generating all standard DATs from the library
|
||||
/// </summary>
|
||||
/// <param name="norename">True if files should not be renamed with system and/or source in merged mode (default false)</param>
|
||||
/// <param name="old">True if the output file should be in ClrMamePro format (default false)</param>
|
||||
private static void InitGenerateAll(string outdir, bool norename, bool old)
|
||||
private static void InitGenerateAll(bool norename, bool old)
|
||||
{
|
||||
string actualdir = (outdir == "" ? Environment.CurrentDirectory + Path.DirectorySeparatorChar :
|
||||
(!outdir.EndsWith(Path.DirectorySeparatorChar.ToString()) ? outdir + Path.DirectorySeparatorChar : outdir));
|
||||
outdir = actualdir + "temp" + Path.DirectorySeparatorChar;
|
||||
|
||||
// Generate system-merged
|
||||
string query = "SELECT DISTINCT systems.id FROM systems JOIN games ON systems.id=games.system ORDER BY systems.manufacturer, systems.system";
|
||||
//string query = "SELECT DISTINCT system.id FROM system JOIN gamesystem ON system.id=gamesystem.systemid ORDER BY system.manufacturer, system.name";
|
||||
List<string> systems = new List<string>();
|
||||
using (SqliteConnection dbc = new SqliteConnection(_connectionString))
|
||||
{
|
||||
dbc.Open();
|
||||
|
||||
string query = "SELECT id FROM system";
|
||||
using (SqliteCommand slc = new SqliteCommand(query, dbc))
|
||||
{
|
||||
using (SqliteDataReader sldr = slc.ExecuteReader())
|
||||
@@ -1358,104 +1342,25 @@ Make a selection:
|
||||
// If nothing is found, tell the user and exit
|
||||
if (!sldr.HasRows)
|
||||
{
|
||||
logger.Error("No systems found! Please add a source and then try again.");
|
||||
_logger.Warning("No systems found! Please add a system and then try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
while (sldr.Read())
|
||||
{
|
||||
InitGenerate(sldr.GetInt32(0).ToString(), "", outdir, norename, old);
|
||||
|
||||
// Generate custom
|
||||
string squery = @"SELECT DISTINCT sources.id
|
||||
FROM systems
|
||||
JOIN games
|
||||
ON systems.id=games.system
|
||||
JOIN sources
|
||||
ON games.source=sources.id
|
||||
WHERE systems.id=" + sldr.GetInt32(0).ToString() + @"
|
||||
ORDER BY sources.name";
|
||||
/*
|
||||
string squery = @"SELECT DISTINCT source.id
|
||||
FROM system
|
||||
JOIN gamesystem
|
||||
ON system.id=gamesystem.systemid
|
||||
JOIN gamesource
|
||||
ON gamesystem.game=gamesource.game
|
||||
JOIN source
|
||||
ON gamesource.sourceid=source.id
|
||||
WHERE system.id=" + sldr.GetInt32(0).ToString() + @"
|
||||
ORDER BY source.name";
|
||||
*/
|
||||
|
||||
using (SqliteCommand sslc = new SqliteCommand(squery, dbc))
|
||||
{
|
||||
using (SqliteDataReader ssldr = sslc.ExecuteReader())
|
||||
{
|
||||
// If nothing is found, tell the user and exit
|
||||
if (!ssldr.HasRows)
|
||||
{
|
||||
logger.Error("No sources found! Please add a source and then try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
while (ssldr.Read())
|
||||
{
|
||||
InitGenerate(sldr.GetInt32(0).ToString(), ssldr.GetInt32(0).ToString(), outdir, norename, old);
|
||||
}
|
||||
}
|
||||
}
|
||||
systems.Add(sldr.GetInt32(0).ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Generate source-merged
|
||||
query = "SELECT DISTINCT sources.id, sources.name FROM sources JOIN games ON sources.id=games.source ORDER BY sources.name";
|
||||
//query = "SELECT DISTINCT source.id, source.name FROM source JOIN gamesource ON source.id=gamesource.sourceid ORDER BY source.name";
|
||||
|
||||
using (SqliteCommand slc = new SqliteCommand(query, dbc))
|
||||
// Loop through the inputs
|
||||
foreach (string system in systems)
|
||||
{
|
||||
using (SqliteDataReader sldr = slc.ExecuteReader())
|
||||
{
|
||||
// If nothing is found, tell the user and exit
|
||||
if (!sldr.HasRows)
|
||||
{
|
||||
logger.Error("No sources found! Please add a source and then try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
while (sldr.Read())
|
||||
{
|
||||
InitGenerate("", sldr.GetInt32(0).ToString(), outdir, norename, old);
|
||||
_logger.User("Generating DAT for system id " + system);
|
||||
InitGenerate(system, norename, old);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Generate MEGAMERGED
|
||||
InitGenerate("", "", outdir, norename, old);
|
||||
|
||||
// Zip up all of the files that were generated
|
||||
logger.User("Creating zip archive");
|
||||
ZipArchive zip = ZipFile.Open(actualdir + "dats-" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".zip", ZipArchiveMode.Create);
|
||||
foreach (String filename in Directory.EnumerateFiles(outdir))
|
||||
{
|
||||
if (filename.EndsWith(".xml") || filename.EndsWith(".dat"))
|
||||
{
|
||||
string internalFolder = (filename.Contains("ALL (Merged") ? "" :
|
||||
filename.Contains("Merged") ? "merged-system/" :
|
||||
filename.Contains("ALL") ? "merged-source/" : "custom/");
|
||||
zip.CreateEntryFromFile(filename, internalFolder + Path.GetFileName(filename), CompressionLevel.Optimal);
|
||||
}
|
||||
}
|
||||
zip.Dispose();
|
||||
logger.User("Zip archive created!");
|
||||
|
||||
// Remove all of the DATs from the folder
|
||||
Directory.Delete(outdir, true);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wrap converting DAT file from any format to any format
|
||||
@@ -1474,13 +1379,13 @@ Make a selection:
|
||||
|
||||
if (File.Exists(filename))
|
||||
{
|
||||
logger.User("Converting \"" + Path.GetFileName(filename) + "\"");
|
||||
_logger.User("Converting \"" + Path.GetFileName(filename) + "\"");
|
||||
DatData datdata = new DatData
|
||||
{
|
||||
OutputFormat = outputFormat,
|
||||
MergeRoms = false,
|
||||
};
|
||||
datdata = RomManipulation.Parse(filename, 0, 0, datdata, logger, true);
|
||||
datdata = RomManipulation.Parse(filename, 0, 0, datdata, _logger, true);
|
||||
|
||||
// Sometimes the description doesn't match the filename, change this
|
||||
if (datdata.Description != Path.GetFileNameWithoutExtension(filename))
|
||||
@@ -1495,7 +1400,7 @@ Make a selection:
|
||||
datdata.Description += ".new";
|
||||
}
|
||||
|
||||
Output.WriteDatfile(datdata, (outdir == "" ? Path.GetDirectoryName(filename) : outdir), logger);
|
||||
Output.WriteDatfile(datdata, (outdir == "" ? Path.GetDirectoryName(filename) : outdir), _logger);
|
||||
}
|
||||
else if (Directory.Exists(filename))
|
||||
{
|
||||
@@ -1503,13 +1408,13 @@ Make a selection:
|
||||
|
||||
foreach (string file in Directory.EnumerateFiles(filename, "*", SearchOption.AllDirectories))
|
||||
{
|
||||
logger.User("Converting \"" + Path.GetFullPath(file).Remove(0, filename.Length) + "\"");
|
||||
_logger.User("Converting \"" + Path.GetFullPath(file).Remove(0, filename.Length) + "\"");
|
||||
DatData datdata = new DatData
|
||||
{
|
||||
OutputFormat = outputFormat,
|
||||
MergeRoms = false,
|
||||
};
|
||||
datdata = RomManipulation.Parse(file, 0, 0, datdata, logger, true);
|
||||
datdata = RomManipulation.Parse(file, 0, 0, datdata, _logger, true);
|
||||
|
||||
// If the extension matches, append ".new" to the filename
|
||||
string extension = (datdata.OutputFormat == OutputFormat.Xml || datdata.OutputFormat == OutputFormat.SabreDat ? ".xml" : ".dat");
|
||||
@@ -1518,12 +1423,12 @@ Make a selection:
|
||||
datdata.FileName += ".new";
|
||||
}
|
||||
|
||||
Output.WriteDatfile(datdata, (outdir == "" ? Path.GetDirectoryName(file) : outdir + Path.GetDirectoryName(file).Remove(0, filename.Length - 1)), logger);
|
||||
Output.WriteDatfile(datdata, (outdir == "" ? Path.GetDirectoryName(file) : outdir + Path.GetDirectoryName(file).Remove(0, filename.Length - 1)), _logger);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("I'm sorry but " + filename + " doesn't exist!");
|
||||
_logger.Error("I'm sorry but " + filename + " doesn't exist!");
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -1554,7 +1459,7 @@ Make a selection:
|
||||
string name = Path.GetFileNameWithoutExtension(input) + "-miss";
|
||||
|
||||
// Read in the roms from the DAT and then write them to the file
|
||||
logger.User("Converting " + input);
|
||||
_logger.User("Converting " + input);
|
||||
DatData datdata = new DatData
|
||||
{
|
||||
OutputFormat = OutputFormat.MissFile,
|
||||
@@ -1568,7 +1473,7 @@ Make a selection:
|
||||
GameName = gamename,
|
||||
Romba = romba,
|
||||
};
|
||||
datdata = RomManipulation.Parse(input, 0, 0, datdata, logger);
|
||||
datdata = RomManipulation.Parse(input, 0, 0, datdata, _logger);
|
||||
datdata.FileName += "-miss";
|
||||
datdata.Name += "-miss";
|
||||
datdata.Description += "-miss";
|
||||
@@ -1577,13 +1482,13 @@ Make a selection:
|
||||
addext = (addext == "" || addext.StartsWith(".") ? addext : "." + addext);
|
||||
repext = (repext == "" || repext.StartsWith(".") ? repext : "." + repext);
|
||||
|
||||
Output.WriteDatfile(datdata, Path.GetDirectoryName(input), logger);
|
||||
logger.User(input + " converted to: " + name);
|
||||
Output.WriteDatfile(datdata, Path.GetDirectoryName(input), _logger);
|
||||
_logger.User(input + " converted to: " + name);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("I'm sorry but " + input + "doesn't exist!");
|
||||
_logger.Error("I'm sorry but " + input + "doesn't exist!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1601,7 +1506,7 @@ Make a selection:
|
||||
|
||||
if (input != "" && (File.Exists(input) || Directory.Exists(input)))
|
||||
{
|
||||
TrimMerge sg = new TrimMerge(input, root, rename, force, logger);
|
||||
TrimMerge sg = new TrimMerge(input, root, rename, force, _logger);
|
||||
sg.Process();
|
||||
return;
|
||||
}
|
||||
@@ -1641,7 +1546,7 @@ Make a selection:
|
||||
}
|
||||
catch (PathTooLongException)
|
||||
{
|
||||
logger.Warning("The path for " + file + " was too long");
|
||||
_logger.Warning("The path for " + file + " was too long");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1653,12 +1558,12 @@ Make a selection:
|
||||
}
|
||||
catch (PathTooLongException)
|
||||
{
|
||||
logger.Warning("The path for " + input.Replace("\"", "") + " was too long");
|
||||
_logger.Warning("The path for " + input.Replace("\"", "") + " was too long");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MergeDiff md = new MergeDiff(newInputs, name, desc, cat, version, author, diff, dedup, bare, forceunpack, old, superdat, cascade, inplace, outdir, logger);
|
||||
MergeDiff md = new MergeDiff(newInputs, name, desc, cat, version, author, diff, dedup, bare, forceunpack, old, superdat, cascade, inplace, outdir, _logger);
|
||||
md.Process();
|
||||
}
|
||||
|
||||
@@ -1681,16 +1586,16 @@ Make a selection:
|
||||
{
|
||||
if (exta == "" || extb == "")
|
||||
{
|
||||
logger.Warning("Two extensions are needed to split a DAT!");
|
||||
_logger.Warning("Two extensions are needed to split a DAT!");
|
||||
return;
|
||||
}
|
||||
ExtSplit es = new ExtSplit(input, exta, extb, outdir, logger);
|
||||
ExtSplit es = new ExtSplit(input, exta, extb, outdir, _logger);
|
||||
es.Split();
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Log("I'm sorry but " + input + "doesn't exist!");
|
||||
_logger.Log("I'm sorry but " + input + "doesn't exist!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1709,7 +1614,7 @@ Make a selection:
|
||||
{
|
||||
if (!File.Exists(input.Replace("\"", "")) && !Directory.Exists(input.Replace("\"", "")))
|
||||
{
|
||||
logger.Error(input + " is not a valid file or folder!");
|
||||
_logger.Error(input + " is not a valid file or folder!");
|
||||
Console.WriteLine();
|
||||
Build.Help();
|
||||
return;
|
||||
@@ -1717,7 +1622,7 @@ Make a selection:
|
||||
}
|
||||
|
||||
// If so, run the program
|
||||
HashSplit hs = new HashSplit(inputs, outdir, logger);
|
||||
HashSplit hs = new HashSplit(inputs, outdir, _logger);
|
||||
hs.Split();
|
||||
}
|
||||
|
||||
@@ -1761,11 +1666,11 @@ Make a selection:
|
||||
{
|
||||
if (DBTools.AddSource(name, url, _connectionString))
|
||||
{
|
||||
logger.Log("Source " + name + " added!");
|
||||
_logger.Log("Source " + name + " added!");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("Source " + name + " could not be added!");
|
||||
_logger.Error("Source " + name + " could not be added!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1780,16 +1685,16 @@ Make a selection:
|
||||
{
|
||||
if (DBTools.RemoveSource(srcid, _connectionString))
|
||||
{
|
||||
logger.Log("Source '" + srcid + "' removed!");
|
||||
_logger.Log("Source '" + srcid + "' removed!");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("Source with id '" + srcid + "' could not be removed.");
|
||||
_logger.Error("Source with id '" + srcid + "' could not be removed.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("Invalid input");
|
||||
_logger.Error("Invalid input");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1802,11 +1707,11 @@ Make a selection:
|
||||
{
|
||||
if (DBTools.AddSystem(manufacturer, system, _connectionString))
|
||||
{
|
||||
logger.Log("System " + manufacturer + " - " + system + " added!");
|
||||
_logger.Log("System " + manufacturer + " - " + system + " added!");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("System " + manufacturer + " - " + system + " could not be added!");
|
||||
_logger.Error("System " + manufacturer + " - " + system + " could not be added!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1821,27 +1726,72 @@ Make a selection:
|
||||
{
|
||||
if (DBTools.RemoveSystem(sysid, _connectionString))
|
||||
{
|
||||
logger.Log("System '" + sysid + "' removed!");
|
||||
_logger.Log("System '" + sysid + "' removed!");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("System with id '" + sysid + "' could not be removed.");
|
||||
_logger.Error("System with id '" + sysid + "' could not be removed.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("Invalid input");
|
||||
_logger.Error("Invalid input");
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Listing Methods
|
||||
#region Helper methods
|
||||
|
||||
/// <summary>
|
||||
/// Perform initial setup for the program
|
||||
/// </summary>
|
||||
private static void Setup()
|
||||
{
|
||||
Remapping.CreateRemappings();
|
||||
Build.Start("DATabaseTwo");
|
||||
|
||||
// Perform initial database and folder setup
|
||||
if (!Directory.Exists(_datroot))
|
||||
{
|
||||
Directory.CreateDirectory(_datroot);
|
||||
}
|
||||
if (!Directory.Exists(_outroot))
|
||||
{
|
||||
Directory.CreateDirectory(_outroot);
|
||||
}
|
||||
DBTools.EnsureDatabase(_dbName, _connectionString);
|
||||
|
||||
using (SqliteConnection dbc = new SqliteConnection(_connectionString))
|
||||
{
|
||||
dbc.Open();
|
||||
|
||||
string query = "SELECT * FROM system";
|
||||
using (SqliteCommand slc = new SqliteCommand(query, dbc))
|
||||
{
|
||||
using (SqliteDataReader sldr = slc.ExecuteReader())
|
||||
{
|
||||
while (sldr.Read())
|
||||
{
|
||||
int systemid = sldr.GetInt32(0);
|
||||
string system = _datroot + Path.DirectorySeparatorChar + sldr.GetString(1) + " - " + sldr.GetString(2);
|
||||
system = system.Trim();
|
||||
|
||||
if (!Directory.Exists(system))
|
||||
{
|
||||
Directory.CreateDirectory(system);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// List sources in the database
|
||||
/// </summary>
|
||||
/// <param name="all">True to list all sources regardless if there is a game associated or not</param>
|
||||
/// <remarks>This does not have an analogue in DATabaseTwo</remarks>
|
||||
private static void ListSources(bool all = false)
|
||||
{
|
||||
string query = @"
|
||||
@@ -1858,7 +1808,7 @@ ORDER BY sources.name COLLATE NOCASE";
|
||||
// If nothing is found, tell the user and exit
|
||||
if (!sldr.HasRows)
|
||||
{
|
||||
logger.Warning("No sources found! Please add a source and then try again.");
|
||||
_logger.Warning("No sources found! Please add a source and then try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1876,13 +1826,12 @@ ORDER BY sources.name COLLATE NOCASE";
|
||||
/// <summary>
|
||||
/// List systems in the database
|
||||
/// </summary>
|
||||
/// <param name="all">True to list all systems regardless if there is a game associated or not</param>
|
||||
private static void ListSystems(bool all = false)
|
||||
private static void ListSystems()
|
||||
{
|
||||
string query = @"
|
||||
SELECT DISTINCT systems.id, systems.manufacturer, systems.system
|
||||
FROM systems " + (!all ? "JOIN games ON systems.id=games.system" : "") + @"
|
||||
ORDER BY systems.manufacturer, systems.system";
|
||||
SELECT DISTINCT system.id, system.manufacturer, system.name
|
||||
FROM system
|
||||
ORDER BY system.manufacturer, system.name";
|
||||
using (SqliteConnection dbc = new SqliteConnection(_connectionString))
|
||||
{
|
||||
dbc.Open();
|
||||
@@ -1893,7 +1842,7 @@ ORDER BY systems.manufacturer, systems.system";
|
||||
// If nothing is found, tell the user and exit
|
||||
if (!sldr.HasRows)
|
||||
{
|
||||
logger.Warning("No systems found! Please add a system and then try again.");
|
||||
_logger.Warning("No systems found! Please add a system and then try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -105,10 +105,12 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ExtSplit.cs" />
|
||||
<Compile Include="Generate.cs" />
|
||||
<Compile Include="ImportExport\Generate.cs" />
|
||||
<Compile Include="ImportExport\GenerateTwo.cs" />
|
||||
<Compile Include="HashSplit.cs" />
|
||||
<Compile Include="Import.cs" />
|
||||
<Compile Include="ImportExport\Import.cs" />
|
||||
<Compile Include="DATabase.cs" />
|
||||
<Compile Include="ImportExport\ImportTwo.cs" />
|
||||
<Compile Include="MergeDiff.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="TrimMerge.cs" />
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
|
||||
</startup>
|
||||
</configuration>
|
||||
@@ -1,452 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Mono.Data.Sqlite;
|
||||
using System.IO;
|
||||
|
||||
using SabreTools.Helper;
|
||||
|
||||
namespace SabreTools
|
||||
{
|
||||
/// <summary>
|
||||
/// The following features are missing from DATabaseTwo with respect to the original DATabase:
|
||||
/// - Source merging
|
||||
/// - Custom DATs based on a system and a source
|
||||
/// - Multi-source and multi-system DATs
|
||||
///
|
||||
/// The following features need to (want to) be implemented in DATabaseTwo for further stability
|
||||
/// - Import updating file locations and names when SHA-1 hashes are matched
|
||||
/// - True duplicate DATs being removed from the import folder (SHA-1 matches)
|
||||
/// - Generate All only generating DATs that have been recently updated
|
||||
/// + This requires implementing a "last updated" data point for all DATs and tracking for "last generate" somewhere
|
||||
/// - Impelement a ToSort folder for DATs that will place DATs in the correct subfolder on Import
|
||||
/// </summary>
|
||||
public class DATabaseTwo
|
||||
{
|
||||
// Private required variables
|
||||
private static string _datroot = "DATS";
|
||||
private static string _outroot = "Output";
|
||||
private static string _dbName = "dats.sqlite";
|
||||
private static string _connectionString = "Data Source=" + _dbName + ";Version = 3;";
|
||||
private static Logger _logger;
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
Console.Clear();
|
||||
|
||||
// Credits take precidence over all
|
||||
if ((new List<string>(args)).Contains("--credits"))
|
||||
{
|
||||
Build.Credits();
|
||||
return;
|
||||
}
|
||||
|
||||
_logger = new Logger(true, "database2.log");
|
||||
_logger.Start();
|
||||
|
||||
// Perform initial setup
|
||||
Setup();
|
||||
|
||||
// If there's no arguments, show the menu
|
||||
if (args.Length == 0)
|
||||
{
|
||||
_logger.ToFile = true;
|
||||
ShowMainMenu();
|
||||
_logger.Close();
|
||||
return;
|
||||
}
|
||||
|
||||
// Set all default values
|
||||
bool help = false,
|
||||
gen = false,
|
||||
genall = false,
|
||||
ignore = false,
|
||||
listsys = false,
|
||||
norename = false,
|
||||
old = false;
|
||||
string system = "";
|
||||
|
||||
// Determine which switches are enabled (with values if necessary)
|
||||
foreach (string arg in args)
|
||||
{
|
||||
switch (arg)
|
||||
{
|
||||
case "-?":
|
||||
case "-h":
|
||||
case "--help":
|
||||
help = true;
|
||||
break;
|
||||
case "-g":
|
||||
case "--generate":
|
||||
gen = true;
|
||||
break;
|
||||
case "-ga":
|
||||
case "--generate-all":
|
||||
genall = true;
|
||||
break;
|
||||
case "-i":
|
||||
case "--ignore":
|
||||
ignore = true;
|
||||
break;
|
||||
case "-lsy":
|
||||
case "--list-systems":
|
||||
listsys = true;
|
||||
break;
|
||||
case "-nr":
|
||||
case "--no-rename":
|
||||
norename = true;
|
||||
break;
|
||||
case "-o":
|
||||
case "--old":
|
||||
old = true;
|
||||
break;
|
||||
default:
|
||||
if (arg.StartsWith("-sys=") || arg.StartsWith("--system="))
|
||||
{
|
||||
system = arg.Split('=')[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Warning("Invalid input detected: " + arg);
|
||||
Console.WriteLine();
|
||||
Build.Help();
|
||||
_logger.Close();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If help is set or system is blank, show the help screen
|
||||
if (help || (system == "" && !listsys))
|
||||
{
|
||||
Build.Help();
|
||||
_logger.Close();
|
||||
return;
|
||||
}
|
||||
|
||||
// If we want a list of systems
|
||||
if (listsys)
|
||||
{
|
||||
ListSystems();
|
||||
}
|
||||
|
||||
// If we want to generate all DATs
|
||||
else if (genall)
|
||||
{
|
||||
InitImport(ignore);
|
||||
InitGenerateAll(norename, old);
|
||||
}
|
||||
|
||||
// If we want to generate a DAT
|
||||
else if (gen)
|
||||
{
|
||||
InitImport(ignore);
|
||||
InitGenerate(system, norename, old);
|
||||
}
|
||||
|
||||
_logger.Close();
|
||||
}
|
||||
|
||||
#region Menus
|
||||
|
||||
/// <summary>
|
||||
/// Show the text-based main menu
|
||||
/// </summary>
|
||||
private static void ShowMainMenu()
|
||||
{
|
||||
string selection = "";
|
||||
while (selection.ToLowerInvariant() != "x")
|
||||
{
|
||||
Console.Clear();
|
||||
Build.Start("DATabaseTwo");
|
||||
Console.WriteLine(@"MAIN MENU
|
||||
===========================
|
||||
Make a selection:
|
||||
|
||||
1) Show command line usage
|
||||
2) Check for new or changed DATs
|
||||
3) Generate System DATs
|
||||
4) List all available systems
|
||||
5) Show credits
|
||||
X) Exit Program
|
||||
");
|
||||
Console.Write("Enter selection: ");
|
||||
selection = Console.ReadLine();
|
||||
|
||||
switch (selection)
|
||||
{
|
||||
case "1":
|
||||
Console.Clear();
|
||||
Build.Help();
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
break;
|
||||
case "2":
|
||||
ImportMenu();
|
||||
break;
|
||||
case "3":
|
||||
GenerateMenu();
|
||||
break;
|
||||
case "4":
|
||||
Console.Clear();
|
||||
Build.Start("DATabaseTwo");
|
||||
ListSystems();
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
break;
|
||||
case "5":
|
||||
Console.Clear();
|
||||
Build.Credits();
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show the text-based import menu
|
||||
/// </summary>
|
||||
private static void ImportMenu()
|
||||
{
|
||||
string selection = "";
|
||||
bool ignore = false;
|
||||
while (selection.ToLowerInvariant() != "b")
|
||||
{
|
||||
Console.Clear();
|
||||
Build.Start("DATabaseTwo");
|
||||
Console.WriteLine(@"IMPORT MENU
|
||||
===========================
|
||||
Make a selection:
|
||||
|
||||
1) " + (ignore ? "Enable new source prompt" : "Disable new source prompt") + @"
|
||||
2) Begin import process
|
||||
B) Go back to the previous menu
|
||||
");
|
||||
Console.Write("Enter selection: ");
|
||||
selection = Console.ReadLine();
|
||||
switch (selection)
|
||||
{
|
||||
case "1":
|
||||
ignore = !ignore;
|
||||
break;
|
||||
case "2":
|
||||
Console.Clear();
|
||||
InitImport(ignore);
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
ignore = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show the text-based generate menu
|
||||
/// </summary>
|
||||
private static void GenerateMenu()
|
||||
{
|
||||
string selection = "", system = "";
|
||||
bool norename = false, old = false;
|
||||
while (selection.ToLowerInvariant() != "b")
|
||||
{
|
||||
Console.Clear();
|
||||
Build.Start("DATabaseTwo");
|
||||
Console.WriteLine(@"GENERATE MENU
|
||||
===========================
|
||||
Make a selection:
|
||||
|
||||
1) " + (norename ? "Enable game renaming" : "Disable game renaming") + @"
|
||||
2) " + (old ? "Enable XML output" : "Enable ClrMamePro output") + @"
|
||||
3) System ID to generate from" + (system != "" ? ": " + system : "") + @"
|
||||
4) Generate the DAT file for the specified system
|
||||
5) Generate all DAT files
|
||||
B) Go back to the previous menu
|
||||
");
|
||||
Console.Write("Enter selection: ");
|
||||
selection = Console.ReadLine();
|
||||
switch (selection)
|
||||
{
|
||||
case "1":
|
||||
norename = !norename;
|
||||
break;
|
||||
case "2":
|
||||
old = !old;
|
||||
break;
|
||||
case "3":
|
||||
Console.Clear();
|
||||
ListSystems();
|
||||
Console.Write("Please enter the System ID: ");
|
||||
system = Console.ReadLine();
|
||||
break;
|
||||
case "4":
|
||||
Console.Clear();
|
||||
InitGenerate(system, norename, old);
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
system = "";
|
||||
norename = false; old = false;
|
||||
break;
|
||||
case "5":
|
||||
Console.Clear();
|
||||
InitGenerateAll(norename, old);
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
system = "";
|
||||
norename = false; old = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Function Methods
|
||||
|
||||
/// <summary>
|
||||
/// Wrap importing and updating DATs
|
||||
/// </summary>
|
||||
/// <param name="ignore"></param>
|
||||
private static void InitImport(bool ignore)
|
||||
{
|
||||
Import imp = new Import(_datroot, _connectionString, _logger, ignore);
|
||||
imp.ImportData();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wrap generating a DAT from the library
|
||||
/// </summary>
|
||||
/// <param name="system">System ID to be used in the DAT (blank means all)</param>
|
||||
/// <param name="norename">True if files should not be renamed with system and/or source in merged mode (default false)</param>
|
||||
/// <param name="old">True if the output file should be in ClrMamePro format (default false)</param>
|
||||
private static void InitGenerate(string systemid, bool norename, bool old)
|
||||
{
|
||||
Generate gen = new Generate(systemid, "" /* sourceid */, _datroot, _outroot, _connectionString, _logger, norename, old);
|
||||
gen.Export();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wrap generating all standard DATs from the library
|
||||
/// </summary>
|
||||
private static void InitGenerateAll(bool norename, bool old)
|
||||
{
|
||||
List<string> systems = new List<string>();
|
||||
using (SqliteConnection dbc = new SqliteConnection(_connectionString))
|
||||
{
|
||||
dbc.Open();
|
||||
|
||||
string query = "SELECT id FROM system";
|
||||
using (SqliteCommand slc = new SqliteCommand(query, dbc))
|
||||
{
|
||||
using (SqliteDataReader sldr = slc.ExecuteReader())
|
||||
{
|
||||
// If nothing is found, tell the user and exit
|
||||
if (!sldr.HasRows)
|
||||
{
|
||||
_logger.Warning("No systems found! Please add a system and then try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
while (sldr.Read())
|
||||
{
|
||||
systems.Add(sldr.GetInt32(0).ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Loop through the inputs
|
||||
foreach (string system in systems)
|
||||
{
|
||||
_logger.User("Generating DAT for system id " + system);
|
||||
InitGenerate(system, norename, old);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// List systems in the database
|
||||
/// </summary>
|
||||
private static void ListSystems()
|
||||
{
|
||||
string query = @"
|
||||
SELECT DISTINCT system.id, system.manufacturer, system.name
|
||||
FROM system
|
||||
ORDER BY system.manufacturer, system.name";
|
||||
using (SqliteConnection dbc = new SqliteConnection(_connectionString))
|
||||
{
|
||||
dbc.Open();
|
||||
using (SqliteCommand slc = new SqliteCommand(query, dbc))
|
||||
{
|
||||
using (SqliteDataReader sldr = slc.ExecuteReader())
|
||||
{
|
||||
// If nothing is found, tell the user and exit
|
||||
if (!sldr.HasRows)
|
||||
{
|
||||
_logger.Warning("No systems found! Please add a system and then try again.");
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine("Available Systems (id <= name):\n");
|
||||
while (sldr.Read())
|
||||
{
|
||||
Console.WriteLine(sldr.GetInt32(0) + "\t<=\t" + sldr.GetString(1) + " - " + sldr.GetString(2));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helper Methods
|
||||
|
||||
/// <summary>
|
||||
/// Perform initial setup for the program
|
||||
/// </summary>
|
||||
private static void Setup()
|
||||
{
|
||||
Remapping.CreateRemappings();
|
||||
Build.Start("DATabaseTwo");
|
||||
|
||||
// Perform initial database and folder setup
|
||||
if (!Directory.Exists(_datroot))
|
||||
{
|
||||
Directory.CreateDirectory(_datroot);
|
||||
}
|
||||
if (!Directory.Exists(_outroot))
|
||||
{
|
||||
Directory.CreateDirectory(_outroot);
|
||||
}
|
||||
DBTools.EnsureDatabase(_dbName, _connectionString);
|
||||
|
||||
using (SqliteConnection dbc = new SqliteConnection(_connectionString))
|
||||
{
|
||||
dbc.Open();
|
||||
|
||||
string query = "SELECT * FROM system";
|
||||
using (SqliteCommand slc = new SqliteCommand(query, dbc))
|
||||
{
|
||||
using (SqliteDataReader sldr = slc.ExecuteReader())
|
||||
{
|
||||
while (sldr.Read())
|
||||
{
|
||||
int systemid = sldr.GetInt32(0);
|
||||
string system = _datroot + Path.DirectorySeparatorChar + sldr.GetString(1) + " - " + sldr.GetString(2);
|
||||
system = system.Trim();
|
||||
|
||||
if (!Directory.Exists(system))
|
||||
{
|
||||
Directory.CreateDirectory(system);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{C7732A05-1F96-43ED-AC8C-0E388F37EBC1}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>DATabaseTwo</RootNamespace>
|
||||
<AssemblyName>DATabaseTwo</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\..\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>..\..\Debug-x64\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>..\..\Release-x64\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Mono.Data.Sqlite, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Mono.Data.Sqlite.Portable.1.0.3.5\lib\net4\Mono.Data.Sqlite.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data.Portable, Version=4.0.0.0, Culture=neutral, PublicKeyToken=59e704a76bc4613a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Mono.Data.Sqlite.Portable.1.0.3.5\lib\net4\System.Data.Portable.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Transactions" />
|
||||
<Reference Include="System.Transactions.Portable, Version=4.0.0.0, Culture=neutral, PublicKeyToken=59e704a76bc4613a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Mono.Data.Sqlite.Portable.1.0.3.5\lib\net4\System.Transactions.Portable.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DATabaseTwo.cs" />
|
||||
<Compile Include="GenerateTwo.cs" />
|
||||
<Compile Include="ImportTwo.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SabreHelper\SabreHelper.csproj">
|
||||
<Project>{225a1afd-0890-44e8-b779-7502665c23a5}</Project>
|
||||
<Name>SabreHelper</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="..\packages\Mono.Data.Sqlite.Portable.1.0.3.5\tools\Mono.Data.Sqlite.Portable.targets" Condition="Exists('..\packages\Mono.Data.Sqlite.Portable.1.0.3.5\tools\Mono.Data.Sqlite.Portable.targets')" />
|
||||
<Target Name="EnsureMonoDataSqlitePortableImported" BeforeTargets="BeforeBuild" Condition="'$(MonoDataSqlitePortableImported)' == ''">
|
||||
<Error Condition="!Exists('..\packages\Mono.Data.Sqlite.Portable.1.0.3.5\tools\Mono.Data.Sqlite.Portable.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them." />
|
||||
<Error Condition="Exists('..\packages\Mono.Data.Sqlite.Portable.1.0.3.5\tools\Mono.Data.Sqlite.Portable.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build." />
|
||||
</Target>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("DATabaseTwo")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("DATabaseTwo")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2016")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("c7732a05-1f96-43ed-ac8c-0e388f37ebc1")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Mono.Data.Sqlite.Portable" version="1.0.3.5" targetFramework="net452" />
|
||||
</packages>
|
||||
@@ -99,18 +99,16 @@ Options:
|
||||
-extb= Second extension to split by
|
||||
-out= Output directory
|
||||
-g, --generate Start tool in generate mode
|
||||
-system= Comma-separated list of system IDs
|
||||
-source= Comma-separated list of source IDs
|
||||
-out= Output directory
|
||||
-system= System ID to generate from
|
||||
-nr, --no-rename Don't auto-rename games
|
||||
-o, --old Output DAT in CMP format instead of XML
|
||||
-ga, --generate-all Start tool in generate all mode
|
||||
-out= Output directory
|
||||
-nr, --no-rename Don't auto-rename games
|
||||
-o, --old Output DAT in CMP format instead of XML
|
||||
-hs, --hash-split Split a DAT or folder by best-available hashes
|
||||
-out= Output directory
|
||||
-i, --import Start tool in import mode
|
||||
-ig, --ignore Don't prompt for new sources
|
||||
-lso, --list-sources List all sources (id <= name)
|
||||
-lsy, --list-systems List all systems (id <= name)
|
||||
-m, --merge Merge one or more DATs
|
||||
@@ -195,22 +193,6 @@ This program will output the following DATs:
|
||||
(d) Have - (NewComplete)-(New Missing)
|
||||
OR (Complete or NewComplete)-(Missing) if one is missing");
|
||||
break;
|
||||
case "DATabaseTwo":
|
||||
Console.WriteLine(@"DATabaseTwo - Catalog and merge DATs by system
|
||||
-----------------------------------------
|
||||
Usage: DATabaseTwo [options]
|
||||
|
||||
Options:
|
||||
-h, -?, --help Show this help dialog
|
||||
-g, --generate Start tool in generate mode
|
||||
-ga, --generate-all Start tool in generate all mode
|
||||
-i, --ignore Don't prompt for new sources
|
||||
-lsy, --list-systems List all systems (id <= name)
|
||||
-nr, --no-rename Don't auto-rename games by source/system
|
||||
-o, --old Output DAT in CMP format instead of XML
|
||||
-sys=, --system= System ID to generate from
|
||||
");
|
||||
break;
|
||||
case "Filter":
|
||||
Console.WriteLine(@"Filter - Filter DATs by inputted criteria
|
||||
-----------------------------------------
|
||||
|
||||
@@ -15,8 +15,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DATFromDir", "DATFromDir\DA
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OfflineMerge", "OfflineMerge\OfflineMerge.csproj", "{88310DB9-3B64-4268-AD48-2E0358D4CA5F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DATabaseTwo", "DATabaseTwo\DATabaseTwo.csproj", "{C7732A05-1F96-43ED-AC8C-0E388F37EBC1}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filter", "Filter\Filter.csproj", "{136AA0D0-9234-4680-B593-A32C0762972E}"
|
||||
EndProject
|
||||
Global
|
||||
@@ -76,14 +74,6 @@ Global
|
||||
{88310DB9-3B64-4268-AD48-2E0358D4CA5F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{88310DB9-3B64-4268-AD48-2E0358D4CA5F}.Release|x64.ActiveCfg = Release|x64
|
||||
{88310DB9-3B64-4268-AD48-2E0358D4CA5F}.Release|x64.Build.0 = Release|x64
|
||||
{C7732A05-1F96-43ED-AC8C-0E388F37EBC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C7732A05-1F96-43ED-AC8C-0E388F37EBC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C7732A05-1F96-43ED-AC8C-0E388F37EBC1}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{C7732A05-1F96-43ED-AC8C-0E388F37EBC1}.Debug|x64.Build.0 = Debug|x64
|
||||
{C7732A05-1F96-43ED-AC8C-0E388F37EBC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C7732A05-1F96-43ED-AC8C-0E388F37EBC1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C7732A05-1F96-43ED-AC8C-0E388F37EBC1}.Release|x64.ActiveCfg = Release|x64
|
||||
{C7732A05-1F96-43ED-AC8C-0E388F37EBC1}.Release|x64.Build.0 = Release|x64
|
||||
{136AA0D0-9234-4680-B593-A32C0762972E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{136AA0D0-9234-4680-B593-A32C0762972E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{136AA0D0-9234-4680-B593-A32C0762972E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
|
||||
Reference in New Issue
Block a user